当前位置: 代码迷 >> 综合 >> @RequestBody Unrecognized field异常原因
  详细解决方案

@RequestBody Unrecognized field异常原因

热度:61   发布时间:2023-10-14 02:11:07.0

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

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

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

@RequestBody Unrecognized field异常原因

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

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

@RequestBody Unrecognized field异常原因

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

@RequestBody Unrecognized field异常原因

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

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

@RequestBody Unrecognized field异常原因

@RequestBody Unrecognized field异常原因

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

  相关解决方案