include class name in all objects serialized by jackson

前端 未结 1 983
孤城傲影
孤城傲影 2020-12-06 19:02

How to include class name in all serialized objects? E.g. adding \"_class: \'MyClass\'\" to output value. Is there some global setting for that? I don\'t want to add any ann

相关标签:
1条回答
  • 2020-12-06 19:39

    You need to annotated your type with the @JsonTypeInfo annotation and configure how the type information should be serialized. Refer this page for reference.

    Example:

    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));
        }
    }
    

    Output:

    {
      "__class" : "stackoverflow.JacksonClassInfo$Bean",
      "field" : "value"
    }
    Bean{field='value'}
    
    0 讨论(0)
提交回复
热议问题