在使用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" })
指定的字段不会被序列化和反序列化。