栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么Spring MVC会报告“找不到类型为org.json.JSONObject的返回值的转换器”?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么Spring MVC会报告“找不到类型为org.json.JSONObject的返回值的转换器”?

我不知道您为什么要使用两个JSON解析库。而不是创建一个

JSONObject
,而是创建Jackson的等效项
ObjectNode

假设您可以访问

ObjectMapper
Spring MVC堆栈使用的

@Autowiredprivate ObjectMapper objectMapper;

用它来创建和填充

ObjectNode

ObjectNode jsonObject = mapper.createObjectNode();jsonObject.put("status", "User with that username already exists.");// don't forget to change return type to support thisreturn new ResponseEntity<>(jsonObject, HttpStatus.BAD_REQUEST);

由于这是Jackson类型,Jackson知道如何序列化它。

它不知道如何序列化

JSONObject
。以下某些解释来自我在这里的回答。

本质上,Spring
MVC使用

HandlerMethodReturnValueHandler
实现来处理
@RequestMapping
@PostMapping
)带注释的方法返回的值。对于
ResponseEntity
,实现是
HttpEntityMethodProcessor

此实现仅循环遍历

HttpMessageConverter
实例集合,检查实例是否可以序列化,并
body
在可以的情况下
ResponseEntity
使用它。

不幸的是,Jackson的

HttpMessageConverter
实现
MappingJackson2HttpMessageConverter
使用
ObjectMapper
来序列化这些对象,
ObjectMapper
并且无法序列化,
JSONObject
因为它无法发现类中的任何属性(即bean
getter)。

杰克逊

HttpMessageConverter
无法做到,默认情况下注册的所有其他杰克逊也不能做到。这就是为什么Spring
MVC报告“没有转换器”的原因。

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class org.json.JSONObject

另一种解决方案是将

JSONObject
自己序列化为a
String
并将其传递给
ResponseEntity
。显然,您需要将返回类型更改为support
String
。在这种情况下,Spring
MVC将使用
StringHttpMessageConverter
。但是,您需要自己指定
application/json
内容类型,因为它不会添加内容类型。例如,

HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);return new ResponseEntity<>(responseJson.toString(), headers, HttpStatus.BAD_REQUEST);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/421869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号