Jackson在序列化期间忽略注释



我有下面的结构来序列化

@JsonTypeName("DS")
public class Elemencik implements IC {
private String item;
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public Elemencik() {
}
}
@JsonTypeInfo(use= JsonTypeInfo.Id.NAME, include= JsonTypeInfo.As.PROPERTY, property="type")
@JsonSubTypes({
@JsonSubTypes.Type(Elemencik.class)
})
public interface IC {
}

我使用ObjectMapper来序列化Elemencik类的实例。

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.USE_ANNOTATIONS, true);
IC mm = new Elemencik();
String res = mapper.writeValueAsString(mm);

序列化之后,我看到映射器获取了包含在注释@JsonTypeName("DS")中的关于类型的信息。final json没有字段类型。这是我的pom。xml

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.11.1</version>
</dependency>

有什么问题?

我认为你的import有问题,如果你的进口是

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

那么它就不能序列化类型字段你有这个字符串:

{"item":null}

但是如果你的导入是:

import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

,代码是:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.USE_ANNOTATIONS, true);
IC mm = new Elemencik();
String res = mapper.writeValueAsString(mm);

它可以序列化类型字段,你有以下字符串:

{"type":"DS","item":null}

最新更新