一个坑,简单记录一下。
序列化对象:
@Data
public class TestA {
private String sId;
}
由于是 lombok,会编译成:
将这个对象先用 FastJson 序列化,再用 JackSon parse 成对象:
@Data
public class TestA {
private String sId;
public static void main(String[] args) throws IOException {
ObjectMapper OBJECT_MAPPER = new ObjectMapper();
//jacksonToFastJson(OBJECT_MAPPER);
TestA ta = new TestA();
ta.setSId("a");
String s = JSONObject.toJSONString(ta);
TestA testA = OBJECT_MAPPER.readValue(s, TestA.class);
System.out.println(testA.getSId());
}
private static void jacksonToFastJson(ObjectMapper OBJECT_MAPPER) throws JsonProcessingException {
TestA ta = new TestA();
ta.setSId("a");
String s = OBJECT_MAPPER.writeValueAsString(ta);
TestA testA = JSONObject.parseObject(s, TestA.class);
System.out.println(testA.getSId());
}
}
异常信息:
Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "sId" (class com.spark.plan.service.TestA), not marked as ignorable (one known property: "sid"])
at [Source: (String)"{"sId":"a"}"; line: 1, column: 9] (through reference chain: com.spark.plan.service.TestA["sId"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:823)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1153)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1589)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1567)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:294)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004)
解决方案:
使用相同的序列化方式或者重新写 getXXX 方法为 getsid()。