Classname作为json字段

时间:2015-12-16 13:08:34

标签: java json jackson

简介

我需要将包含嵌套对象(都实现接口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 {}

2 个答案:

答案 0 :(得分:0)

您是否考虑过使用Google GSon?对我来说就像是一种魅力。

您的代码可能如此:

FahrwegEreignis fahrweg = new Fahrweg();
Gson gson = new Gson();
String json = gson.toJson(fahrweg);

答案 1 :(得分:0)

您可以在实现接口的类的实例上运行以下命令:

FahrwegEreignisMixInImpl.getClass().getName()