解决java.lang.ClassCastException

简介: 解决java.lang.ClassCastException

问题

前后端分离开发中,往往需要统一封装返回数据用到一个Result<T>类包装多个接口:

重复劳动并不优雅,于是想用@RestControllerAdvice做控制器拦截增强,进行封装。

代码如下:

@RestControllerAdvice(basePackages = "com.mijiu.controller")
@NonNullApi
public class ResultAdvice implements ResponseBodyAdvice<Object> {
  
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }
 
    @Override
    public Object beforeBodyWrite(@Nullable Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        return Result.success(body);
    }
}

supports直接返回true代表全部拦截进行封装。

于是开始测试这个返回String类型的接口

结果:

抛出了这个类强制转换异常:

java.lang.ClassCastException

研究了一下得出了原因

原因

封装的统一响应AOP对返回的数据进行了封装,而Controller层返回的数据类型定义为String类型。导致响应解析器转换报错。目前发现仅仅对String类型抛出该异常。

解决方案

判断body类型是String则进行手动转换

@Override
    public Object beforeBodyWrite(@Nullable Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        if(body instanceof String){
            return JSONUtil.toJsonStr(Result.success(body));
        }
 
        return Result.success(body);
    }

重启项目再次调试。

成功,问题解决!

目录
相关文章
|
3月前
|
存储 安全 Java
【Java】已解决Java中的java.lang.VerifyError异常
【Java】已解决Java中的java.lang.VerifyError异常
58 1
|
3月前
|
Java 测试技术
【Java】已解决java.lang.UnsupportedOperationException异常
【Java】已解决java.lang.UnsupportedOperationException异常
113 0
|
3月前
|
IDE Java Maven
【Java】已解决:java.lang.NoSuchMethodError异常
【Java】已解决:java.lang.NoSuchMethodError异常
536 0
|
3月前
|
IDE Java 开发工具
【Java】已解决java.lang.NoClassDefFoundError异常
【Java】已解决java.lang.NoClassDefFoundError异常
368 0
|
3月前
|
安全 Java API
【Java】已解决java.lang.SecurityException异常
【Java】已解决java.lang.SecurityException异常
147 0
|
3月前
|
安全 Java
解决Java中的ClassCastException问题
解决Java中的ClassCastException问题
|
11月前
|
Java
java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError
101 0
java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationException
103 0
java.lang.ExceptionInInitializerError的原因
java.lang.ExceptionInInitializerError的原因
1360 0