@RequestBody:Unrecognized field , not marked as ignorable问题
2017-03-02 19:49
661 查看
好久没写啦…看来以后要经常写啊….
解决方法一:
可以增加一个字段来接收前台传来的这个值,如果存在多个字段,这种方式很不好(就算一个字段,如果没用,新增字段也不好)。
解决方法二:
在前台往后台传值的时候,去掉无用的字段。这样还能减少网络传输的大小。
解决方法三:
还有一些方法,这些方法主要是使用Jackson提供的json注解。
@JsonIgnore注解用来忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法时,和Filed效果一样。这个注解只能用在POJO存在的字段要忽略的情况,不能满足现在需要的情况。
@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。这个注解还可以指定要忽略的字段。使用方法如下:
@JsonIgnoreProperties({ “internalId”, “secretKey” })
指定的字段不会被序列化和反序列化。
解决方案四:
Spring MVC中JSON支持未定义的字段的配置:
在spring的servlet applicationContext.xml中加入以下代码就可以支持了
一个方法中只能有一个@RequestBody注解。
默认情况下@RequestBody标注的对象必须包含前台传来的所有字段。
第一条容易理解,因为RequestBody就是request的inputStream,这个流在第一次使用该注解后会关闭,后面的都会报错(stream closed)。
第二条如果没有包含前台传来的字段,就会报错:Unrecognized field xxx , not marked as ignorable,这是因为MappingJacksonHttpMessageConverter默认要求必须存在相应的字段。如果没有前台传来的某个字段,就会报错。
看似代码很多其实修改只有这一行,这一行用于配置ObjectMapper支持反序列化未知属性。
由于Spring MVC默认注册了以上的MessageConverter,但对默认注册的MessageConverter只能保留然后添加新的MessageConverter,然而我们要修改的就是其默认注册的MappingJackson2HttpMessageConverter,所以只能设置register-defaults=”false”然后拷贝其默认注册的所有MessageConverter并修改MappingJackson2HttpMessageConverter的ObjectMapper用于支持我们的未定义的属性的反序列化。
注:解析json到后端bean的引擎需能够解析@JsonIgnoreProperties注解(fastxml)
swagger不用配置(swagger采用的是spring的objectMapper,所以配置了spring就行)
解决方法一:
可以增加一个字段来接收前台传来的这个值,如果存在多个字段,这种方式很不好(就算一个字段,如果没用,新增字段也不好)。
解决方法二:
在前台往后台传值的时候,去掉无用的字段。这样还能减少网络传输的大小。
解决方法三:
还有一些方法,这些方法主要是使用Jackson提供的json注解。
@JsonIgnore注解用来忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法时,和Filed效果一样。这个注解只能用在POJO存在的字段要忽略的情况,不能满足现在需要的情况。
@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。这个注解还可以指定要忽略的字段。使用方法如下:
@JsonIgnoreProperties({ “internalId”, “secretKey” })
指定的字段不会被序列化和反序列化。
解决方案四:
Spring MVC中JSON支持未定义的字段的配置:
在spring的servlet applicationContext.xml中加入以下代码就可以支持了
<mvc:message-converters register-defaults="false"> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg index="0" value="utf-8"/> </bean> <bean class="org.springframework.http.converter.ResourceHttpMessageConverter" /> <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> <bean class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter" /> <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" /> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> <property name="featuresToDisable"> <util:constant static-field="com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES" /> </property> </bean> </property> </bean> </mvc:message-converters>
一个方法中只能有一个@RequestBody注解。
默认情况下@RequestBody标注的对象必须包含前台传来的所有字段。
第一条容易理解,因为RequestBody就是request的inputStream,这个流在第一次使用该注解后会关闭,后面的都会报错(stream closed)。
第二条如果没有包含前台传来的字段,就会报错:Unrecognized field xxx , not marked as ignorable,这是因为MappingJacksonHttpMessageConverter默认要求必须存在相应的字段。如果没有前台传来的某个字段,就会报错。
看似代码很多其实修改只有这一行,这一行用于配置ObjectMapper支持反序列化未知属性。
由于Spring MVC默认注册了以上的MessageConverter,但对默认注册的MessageConverter只能保留然后添加新的MessageConverter,然而我们要修改的就是其默认注册的MappingJackson2HttpMessageConverter,所以只能设置register-defaults=”false”然后拷贝其默认注册的所有MessageConverter并修改MappingJackson2HttpMessageConverter的ObjectMapper用于支持我们的未定义的属性的反序列化。
注:解析json到后端bean的引擎需能够解析@JsonIgnoreProperties注解(fastxml)
swagger不用配置(swagger采用的是spring的objectMapper,所以配置了spring就行)
相关文章推荐
- SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
- SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
- SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
- SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
- SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
- SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
- SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
- SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
- SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
- 问题:Unrecognized field , not marked as ignorable
- 解决 Unrecognized field xxx , not marked as ignorable 问题
- JackSon反序列化报错,Unrecognized field, not marked as ignorable
- SpringMVC json 转换中错误的解决: Unrecognized field , not marked as ignorable
- not marked as ignorable JDBC like%?% Tomcat 启动一闪而过
- jackson json转bean忽略没有的字段 not marked as ignorable
- not marked as ignorable
- 关于Ubuntu下XXis not marked as executable. it may be dangerous to run. 程序无法执行问题
- Jackson 使用遇到 Unrecognized field, not marked as ignorable
- Unrecognized field , not marked as ignorable
- "cannot be resolved or is not a field"问题解决