解决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);
    }

重启项目再次调试。

成功,问题解决!

目录
相关文章
|
18天前
|
存储 Java 数据库
Java “ClassCastException”解决
Java中的“ClassCastException”是在运行时尝试将对象强制转换为与其实际类型不兼容的类型时引发的异常。解决方法包括:1. 检查类型转换前使用`instanceof`关键字进行类型判断;2. 确保对象的实际类型与目标类型一致;3. 审查代码逻辑,避免不必要的类型转换。
|
4月前
|
Java 测试技术
【Java】已解决java.lang.UnsupportedOperationException异常
【Java】已解决java.lang.UnsupportedOperationException异常
203 0
|
4月前
|
IDE Java 开发工具
【Java】已解决java.lang.NoClassDefFoundError异常
【Java】已解决java.lang.NoClassDefFoundError异常
1657 0
|
4月前
|
IDE Java Maven
【Java】已解决:java.lang.NoSuchMethodError异常
【Java】已解决:java.lang.NoSuchMethodError异常
1469 0
|
4月前
|
Java API
【Java】已解决java.lang.NoSuchMethodException异常
【Java】已解决java.lang.NoSuchMethodException异常
338 0
|
4月前
|
安全 Java API
【Java】已解决java.lang.SecurityException异常
【Java】已解决java.lang.SecurityException异常
551 0
|
4月前
|
安全 Java
解决Java中的ClassCastException问题
解决Java中的ClassCastException问题
java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError
130 0
java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationException
107 0
java.lang.ExceptionInInitializerError的原因
java.lang.ExceptionInInitializerError的原因
1385 0