返回

SpringBoot统一返回处理遇到cannot be cast to java.lang.String问题

发布时间:2022-10-19 06:05:23 463
# 前端# java# 后端# java# json

后端接口返回个前端的格式为:{"result":null,"status":1010}

以前接口有一个return ner ResultBody.success()的操作,后期利用@RestControllerAdvice统一处理后,就不用每一个方法都要写一个返回ResultBody.success()了

SpringBoot统一返回处理遇到cannot be cast to java.lang.String问题_json

但是当返回值是一个String时,会报错ResultBody cannot be cast to java.lang.String

SpringBoot统一返回处理遇到cannot be cast to java.lang.String问题_java_02

原因是返回值是String,Spring会使用StringHttpMessageConverter来处理返回体,但是我们定义的统一返回处理类将返回值String,变成了Result.success((String)),是一个对象。导致类型转换失败了。具体的代码是:
父类AbstractHttpMessageConverter write时,会调子类StringHttpMessageConverter的addDefaultHeaders方法,注意父类处理的是一个泛型

SpringBoot统一返回处理遇到cannot be cast to java.lang.String问题_java_03

而子类StringHttpMessageConverter接收的是String。就会报错了(此时,接收的是Result,是一个对象)。

SpringBoot统一返回处理遇到cannot be cast to java.lang.String问题_java_04

原因就是原来返回值是一个String,统一处理后变为了一个对象Result。导致类型转换失败了。

解决方案有多种,这里使用fastjson序列化来处理

/**
* 项目中的一些bean配置
*/
@Component
public class ProjectConfig {

@Bean
public HttpMessageConverters cusHttpMessageConverter(){
return new HttpMessageConverters(new FastJsonHttpMessageConverter());
}

}

 注意要引入fastjson的依赖

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
746. 数组的左下半部分 2022-10-19 05:40:10