一、场景
public class Result {private boolean isSuccess;
public boolean isSuccess() { return isSuccess; } public void setSuccess(boolean success) { isSuccess = success; }
模型中有形如以上以is开头的字段,使用idea自动生成的get、set方法如上。此时,如果用Jackson序列化或者反序列化这个类时会出现以下问题
序列化:
String input = "{\"isSuccess\":true}\n";Result b = mapper.readValue(input, Result.class);System.out.println(b.toString());
问题1:测试结果:Jackson报错,因为无法识别isSuccess这个字段,Jackson按照get、set方法识别的是success字段;
问题2:在问题1的基础上,有时候我们会使用这个注解来忽略无法识别的字段@JsonIgnoreProperties(ignoreUnknown = true),这时候就会出现,无论你传进来的isSuccess是true还是false,反序列化后,你得到的Result里的isSuccess始终都是false,这是因为这个false实际上是类的初始化值,实际上这个isSuccess被忽略了,所以是赋值的默认值false
@JsonIgnoreProperties(ignoreUnknown = true)public class Result {
二、解决方案
2.1 尽量避免使用is开头的字段
2.2 修改get、set方法(不用idea自动生成的)
public boolean getIsSuccess() { return isSuccess; } public void setIsSuccess(boolean success) { isSuccess = success; }
三、参考文献