我需要将包含嵌套对象(都实现接口Fahrweg
)的java对象(FahrwegEreignis
)序列化为json。
我这样做的代码如下:
Fahrweg fahrweg = new Fahrweg();
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(FahrwegEreignis.class, FahrwegEreignisMixIn.class);
ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
try {
String json = ow.writeValueAsString(fahrweg);
System.out.print(json);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
默认情况下,对象的类型不包含在生成的json中(我假设因为JS是动态类型的)。
我想像每个对象一样添加一个字段:"type" : "classname"
。
我已经读过关于杰克逊注释的内容,而且我使用的是mixin,因为我无法修改有问题的类。我的mixin界面(FahrwegEreignisMixIn
)如下所示:
import com.fasterxml.jackson.annotation.JsonProperty;
public interface FahrwegEreignisMixIn {
@JsonProperty("type")
//TODO
}
我需要在//TODO
放置什么?
我的第一直觉是Class<?> getClass();
,但这并不起作用。
重复问题的答案对我有用。我不得不改变
我的FahrwegEreignisMixIn
:
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "type")
public interface FahrwegEreignisMixIn {}
答案 0 :(得分:0)
您是否考虑过使用Google GSon?对我来说就像是一种魅力。
您的代码可能如此:
FahrwegEreignis fahrweg = new Fahrweg();
Gson gson = new Gson();
String json = gson.toJson(fahrweg);
答案 1 :(得分:0)
您可以在实现接口的类的实例上运行以下命令:
FahrwegEreignisMixInImpl.getClass().getName()