Java Jackson如何在Spring Boot Controller中反序列化输入映射对象
我有一个简单的控制器,它接收地图作为输入:Java Jackson如何在Spring Boot Controller中反序列化输入映射对象,java,json,spring,spring-boot,jackson,Java,Json,Spring,Spring Boot,Jackson,我有一个简单的控制器,它接收地图作为输入: @RequestMapping(value = "/providers", method = RequestMethod.PATCH, headers = "Accept=application/json") @ResponseBody @Transactional public Map<String, Object> updateProvider(@RequestBody Map<String, Object
@RequestMapping(value = "/providers", method = RequestMethod.PATCH, headers = "Accept=application/json")
@ResponseBody
@Transactional
public Map<String, Object> updateProvider(@RequestBody Map<String, Object> updates,
UriComponentsBuilder uriComponentsBuilder, final HttpServletRequest request) {
return updates;
}
然后,如果我使用以下JSON对象发出补丁请求
{
"name":"frndo",
"lastname":""
}
响应中的结果内容为:
但请求中输入的内容是:
我的问题是,如果要序列化Map对象,您有如下全局配置,为什么请求中的内容在响应中不同:
spring.jackson.default属性包含=非空
确切地说,如果lastname
为空,为什么在@RequestBody Map updates
到达时会有name
和lastname
字段
在响应中可以看到配置的效果,但在请求中看不到。如果映射程序必须将JSON转换为java对象,并且在此过程中必须应用全局配置,那么对此的解释是什么
我希望请求和响应中包含相同的内容
非常感谢 该属性仅在序列化期间使用,即将Java对象转换为JSON。那么,为什么您认为它会影响相反的请求,即反序列化?好的,这是我的问题,我认为它用于序列化和反序列化。您确定这一点吗?请参阅:“与JsonInclude一起使用的枚举,用于定义序列化中要包括哪些Java bean属性。”。这就是这个属性所代表的。另外,请参见“确定”,您可以放置您的答案,以帮助有相同问题的其他人。谢谢
{
"name":"frndo",
"lastname":""
}
{
"name":"frndo"
}
{
"name":"frndo",
"lastname":""
}