Unrecognized field , not marked as ignorable解决办法

一、导读

改造post(application/json)方式的接口的时候,前端传了多余的字段,后台接口就报错了,get请求多传参数是不会报错的。

二、问题描述

1. 使用@RequestBody注解的时候需要注意一些问题:

一个方法中只能有一个@RequestBody注解。
默认情况下@RequestBody标注的对象必须包含前台传来的所有字段。

如果没有包含前台传来的字段,就会报错:Unrecognized field xxx , not marked as ignorable,这是因为MappingJacksonHttpMessageConverter默认要求必须存在相应的字段。如果没有前台传来的某个字段,就会报错。。

三、解决办法

  1. 可以增加一个字段来接收前台传来的这个值,如果存在多个字段,这种方式很不好(就算一个字段,如果没用,新增字段也不好)。
    或者在前台往后台传值的时候,去掉无用的字段。这样还能减少网络传输的大小。
    当然如果这个字段前端是统一加得,那么就需要后台处理一下。

使用Jackson提供的json注解。
@JsonIgnore注解用来忽略某些字段

@JsonIgnoreProperties(ignoreUnknown = true)

  1. 将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。
  2. 这个注解还可以指定要忽略的字段。使用方法如下:

@JsonIgnoreProperties({ “internalId”, “secretKey” })

指定的字段不会被序列化和反序列化。

你可能感兴趣的:(requestBody)