欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java.lang.ClassCastException的问题解决,

来源: javaer 分享于  点击 43912 次 点评:168

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

重启项目再次调试。

成功,问题解决!

到此这篇关于java.lang.ClassCastException的问题解决的文章就介绍到这了,更多相关java.lang.ClassCastException内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

您可能感兴趣的文章:
  • Java中java.lang.ClassCastException异常原因及解决方法
  • Java异常ClassCastException的解决
  • 解决java.lang.ClassCastException的java类型转换异常的问题
  • Java ClassCastException异常解决方案
  • Java中java.lang.ClassCastException异常原因以及解决方法详解
  • Java报错:ClassCastException问题解决方法

相关文章

    暂无相关文章
相关栏目:

用户点评