在jackson序列化的所有对象中包含类名

时间:2014-06-27 14:00:12

标签: json spring jackson

如何在所有序列化对象中包含类名?例如。将“_class:'MyClass'”添加到输出值。那是否有一些全球性的背景?我不想在pojo类中添加任何注释。

我正在使用spring4 webmvc @ResponseBody(仅限json格式)。

1 个答案:

答案 0 :(得分:9)

您需要使用@JsonTypeInfo注释注释您的类型,并配置类型信息应如何序列化。请参阅this page以供参考。

示例:

public class JacksonClassInfo {
    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "__class")
    public static class Bean {
        public final String field;

        @JsonCreator
        public Bean(@JsonProperty("field") String field) {
            this.field = field;
        }

        @Override
        public String toString() {
            return "Bean{" +
                    "field='" + field + '\'' +
                    '}';
        }
    }

    public static void main(String[] args) throws IOException {
        Bean bean = new Bean("value");
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(bean);
        System.out.println(json);
        System.out.println(mapper.readValue(json, Bean.class));
    }
}

输出:

{
  "__class" : "stackoverflow.JacksonClassInfo$Bean",
  "field" : "value"
}
Bean{field='value'}