【发布时间】:2016-06-06 02:12:00
【问题描述】:
我正在使用 jackson 2.x 进行序列化和反序列化。我已将 objectMapper 注册到 afterBurner 模块并将对象映射器配置为忽略未知属性
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:无法从字符串值“Num”构造 sample.NumberEnum 的实例:值不是声明的枚举实例名称之一:[ONE,TWO] at(通过引用链:sample.A["a"]->sample.NumberEnum["number"])
A 类是从 jar 中导入的,它使用的是 jackson library 1.9
【问题讨论】:
-
你能提供更多关于错误的信息,以及代码sn-p吗?忽略未知属性与 反序列化 相关,但您正在尝试序列化对象,因此它不应该发挥作用。
-
@MarkPeters 添加了更多详细信息
标签: jackson