Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.0k views
in Technique[技术] by (71.8m points)

json - include class name in all objects serialized by jackson

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 annotation to pojo classes.

I'm using it with spring4 webmvc @ResponseBody (only json format).

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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'}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...