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":""
}