java – @RequestBody在发出POST请求时给出空的JsonObject
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – @RequestBody在发出POST请求时给出空的JsonObject,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1997字,纯文字阅读大概需要3分钟。
内容图文
![java – @RequestBody在发出POST请求时给出空的JsonObject](/upload/InfoBanner/zyjiaocheng/818/36acdfd0f8c24d4cb3d6465525f3588a.jpg)
我有以下方法:
@RequestMapping(value = "/app/write", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
public
@ResponseBody
Status writeBuildData(@RequestBody JsonObject templateDataJSON){}
基本上我发送一个发送JSON的Ajax POST请求,结果总是得到一个空的JsonObject {}
JsonObject templateDataJSON = "{}";
但是如果我使用String而不是JsonObject,我会得到正确的值.
这个应用程序是由Spring Mvc 4.1.4制作的.
依赖关系:
compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
compile 'com.google.code.gson:gson:2.3.1'
知道我错过了什么,为什么JsonObject没有注入,总是给我{}?
解决方法:
Spring不再支持Jackson 1作为消息转换器实现.
所以你的
compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
对Spring来说实际上毫无意义.
您的
compile 'com.google.code.gson:gson:2.3.1'
将导致Spring使用GsonHttpMessageConverter,基本上,这样做
String json = "{\"random\":\"42\"}";
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(json, JsonObject.class);
JsonObject是Gson类型. Gson知道它并且知道如何将JSON对象json反序列化到它中.这将正常工作,并将生成一个值为的JsonObject
{"random":"42"}
既然你说你得到一个空的JsonObject,我只能假设你的类路径上有Jackson 2.
如果类路径上都存在,则Spring会在GsonHttpMessageConverter之前注册Jackson HttpMessageConverter,MappingJackson2HttpMessageConverter.
对于杰克逊,Spring会基本上对您的请求主体进行反序列化
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
JsonObject jsonObject = mapper.readValue(json, JsonObject.class);
你会注意到的结果
{}
这是因为Jackson对JsonObject的类型一无所知,所以它必须动态地构建反序列化策略.该策略取决于Jackson定义为setter的属性(用于反序列化的上下文)或用@JsonProperty注释的任何内容,显然JsonObject没有.所以它基本上认为类型JsonObject没有任何属性(或者可能没有出现在您的自定义JSON内容中).因此,并且因为它忽略了任何未知的属性(这会导致它抛出异常),它只返回一个新的空JsonObject对象.
一种解决方案是从类路径中删除Jackson 2.另一种解决方案是以您想要的顺序显式添加HttpMessageConverter实例.
内容总结
以上是互联网集市为您收集整理的java – @RequestBody在发出POST请求时给出空的JsonObject全部内容,希望文章能够帮你解决java – @RequestBody在发出POST请求时给出空的JsonObject所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。