我正在使用Jackson 2.x进行序列化和反序列化。我已经将objectMapper注册到afterBurner模块,并配置了objectMapper以忽略未知属性。
objectMapper.registerModule(new AfterBurnerModule());
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
但是当它试图序列化一个对象时,会出现“找到未知字段的属性错误”的失败情况
这个Java对象还使用了@JsonIgnoreProperties(ignoreUnknown = true)进行注释
有人能帮助我理解可能出了什么问题吗?
以下是Util类:
package example;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.AnnotationIntrospector;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;
public final class Util {
private static ObjectMapper objectMapper;
static {
objectMapper = new ObjectMapper();
objectMapper.registerModule(new AfterburnerModule());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
objectMapper.setDateFormat(sdf);
objectMapper.setAnnotationIntrospector(AnnotationIntrospector.pair(new JaxbAnnotationIntrospector(objectMapper.getTypeFactory()), new JacksonAnnotationIntrospector()));
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setSerializationInclusion(Include.NON_NULL);
}
private Util() {
}
public static <T> T convertToObject(String jsonString,Class<T> classType){
T obj = null;
try {
obj = objectMapper.readValue(jsonString, classType);
} catch (Exception e) {
}
return obj;
}
public static String convertToString(Object obj)
throws IOException {
return objectMapper.writeValueAsString(obj);
}
}
枚举类型 NumberEnum
package sample;
public enum NumberEnum {
ONE, TWO
}
类A
package sample;
@JsonIgnoreProperties(ignoreUnknown = true)
public class A {
@JsonProperty
private NumberEnum number;
}
我正在进行反序列化的代码如下:
A a = Util.convertToObject(str, A.class);
我将要解析的字符串如下:
{
"number": "Num"
}
在反序列化时出现以下错误:
com.fasterxml.jackson.databind.exc.InvalidFormatException: 无法构造样本.NumberEnum的实例,其字符串值为'Num':该值不是已声明的枚举实例名称之一:[ONE,TWO] (通过引用链:sample.A [“a”] -&gt;sample.NumberEnum [“number”])
类A从一个jar包导入,并使用jackson库1.9。