Spring Boot控制器中Jackson如何反序列化输入Map对象?
接收Map输入的Spring Boot PATCH控制器实现
我最近刚好写了一个用来接收Map作为输入的Spring Boot控制器,专门处理资源的部分更新场景,代码给你参考:
@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; }
关键细节拆解:
- 使用
RequestMethod.PATCH请求方法:完全贴合RESTful风格的部分资源更新场景,和PUT的全量更新做区分 - 通过
@RequestBody绑定Map:直接把JSON请求体转换成Map<String, Object>,不用专门定义DTO类就能灵活接收任意键值对形式的更新参数 headers = "Accept=application/json":限定接口只处理客户端声明接受JSON响应的请求,避免处理不符合预期的请求类型@Transactional注解:给方法加上事务上下文,后续如果扩展数据库更新逻辑的话,能保证操作的原子性- 返回原
updates对象:可以快速验证请求参数是否被正确接收,非常方便调试阶段使用
另外关于你提到的Spring Boot application.properties里的Jackson配置,我常用的配置项供你参考:
# 序列化时忽略空值属性,减少响应冗余 spring.jackson.default-property-inclusion=non_null # 允许解析请求体中的未知属性,避免因额外字段抛出异常 spring.jackson.deserialization.fail-on-unknown-properties=false
这些配置能让Jackson在JSON和Map的转换过程中更灵活,适配更多业务场景。
内容的提问来源于stack exchange,提问作者AlejoDev
相关产品推荐
相关产品推荐

