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