天天看點

SpringMVC @RequestBody問題:Unrecognized field , not marked as ignorable

在使用json傳值并且使用@requestbody注解的時候需要注意一些問題:

一個方法中隻能有一個@requestbody注解。

預設情況下@requestbody标注的對象必須包含前台傳來的所有字段。

第一條容易了解,因為requestbody就是request的inputstream,這個流在第一次使用該注解後會關閉,後面的都會報錯(stream closed)。

第二條如果沒有包含前台傳來的字段,就會報錯:unrecognized field xxx , not marked as ignorable,這是因為mappingjacksonhttpmessageconverter預設要求必須存在相應的字段。如果沒有前台傳來的某個字段,就會報錯。。

解決方法有很多,可以增加一個字段來接收前台傳來的這個值,如果存在多個字段,這種方式很不好(就算一個字段,如果沒用,新增字段也不好)。

或者在前台往背景傳值的時候,去掉無用的字段。這樣還能減少網絡傳輸的大小。

還有一些方法,這些方法主要是使用jackson提供的json注解。

@jsonignore注解用來忽略某些字段,可以用在field或者getter方法上,用在setter方法時,和filed效果一樣。這個注解隻能用在pojo存在的字段要忽略的情況,不能滿足現在需要的情況。

@jsonignoreproperties(ignoreunknown = true),将這個注解寫在類上之後,就會忽略類中不存在的字段,可以滿足目前的需要。這個注解還可以指定要忽略的字段。使用方法如下:

@jsonignoreproperties({ "internalid", "secretkey" })

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