一个坑,简单记录一下。
序列化对象:
@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()。
