当前位置: 代码网 > it编程>编程语言>Java > java.lang.ClassCastException的问题解决

java.lang.ClassCastException的问题解决

2024年07月02日 Java 我要评论
问题前后端分离开发中,往往需要统一封装返回数据用到一个result<t>类包装多个接口:重复劳动并不优雅,于是想用@restcontrolleradvice做控制器拦截增强,进行封装。代码

问题

前后端分离开发中,往往需要统一封装返回数据用到一个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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com