@RequestBody Unrecognized field异常原因

首先引发该异常的原因是 SpringMVC解析前端传入的json格式的参数使用jackson转换为JAVA类的时候,参数中包含JAVA对象中没有的属性导致了异常。

可以在目标对象上加上@JsonIgnoreProperties(ignoreUnknown = true)注解,并配置ignoreUnknown = true,则Jackson在反序列化的时候,会忽略该目标对象不存在的属性。

或者全局配置DeserializationFeature配置:objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);配置该objectMapper在反序列化时,忽略目标对象没有的属性。凡是使用该objectMapper反序列化时,都会拥有该特性。

SpringMVC中有一个转换器,具体的功能是将Http请求做一个指定的转换。

而对JSON格式的Request请求进行解析的默认的实现类是下面这个类

如注释中说明的,我们也可以扩展他实现一些其他格式的支持。

该类提供一个注入ObjectMapper对象的构造方法,使用ObjectMapper对象对Http请求参数解析成具体的JAVA对象或者HashMap实例。

在SpringBoot中,我们可以提供一个自己定制的MappingJackson2HttpMessageConverter对象作为Bean,并在该对象中置入一个定制的ObjectMapper对象,来实现我们的一些定制需求,SpringBoot会将这个MappingJackson2HttpMessageConverter对象自动装配到SpringMVC中,来实现我们的定制需求,如下图所示:

ObjectMappingCustomer是一个集成了ObjectMapper的定制实现,上面对参数转换为具体JAVA类的json化做了忽略未知字段和忽略空字段等定制。这样再使用@RequestBody注解接受JSON格式参数时候就不会产生上面所述的异常了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值