我有下面的结构来序列化
@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}