杰克逊如何在Spring Boot Controller中反序列化输入映射对象

时间:2018-04-23 23:35:38

标签: 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> updates,
            UriComponentsBuilder uriComponentsBuilder, final HttpServletRequest request) {
        return updates;
    }

我在application.properties文件中的Spring Boot中配置了此属性:

spring.jackson.default-property-inclusion=non_empty

然后,如果我使用以下JSON对象发出 PATCH 请求。

{
    "name":"frndo",
    "lastname":""
}

RESPONSE 中的结果内容为:

{
  "name":"frndo"
}

REQUEST 中的输入内容为:

{
    "name":"frndo",
    "lastname":""
}

我的问题是,为什么 REQUEST 中的内容在 RESPONSE 中有所不同,如果要对Map对象进行序列化,则您具有以下全局配置:

spring.jackson.default-property-inclusion=non_empty

如果@RequestBody Map<String, Object> updates为空,那么name到达时的确切原因是lastnamelastname字段?

RESPONSE 中,您可以看到配置的效果,但在 REQUEST 中看不到。如果映射器必须将JSON转换为java对象,并且在该过程中必须应用全局配置,那么对此有何解释?

我希望在 REQUEST RESPONSE 中提供相同的内容

非常感谢!

0 个答案:

没有答案