복붙노트

[SPRING] jackson에 의해 직렬화 된 모든 객체에 클래스 이름 포함

SPRING

jackson에 의해 직렬화 된 모든 객체에 클래스 이름 포함

모든 직렬화 된 객체에 클래스 이름을 포함시키는 방법? 예 : "_class : 'MyClass'"를 출력 값에 추가합니다. 거기에 대한 몇 가지 글로벌 설정이 있습니까? pojo 클래스에 주석을 추가하고 싶지 않습니다.

나는 spring4 webmvc @ResponseBody (json 형식 만)와 함께 사용하고 있습니다.

해결법

  1. ==============================

    1.@JsonTypeInfo 주석을 사용하여 유형에 주석을 달고 유형 정보를 직렬화해야하는 방법을 구성해야합니다. 참고로이 페이지를 참조하십시오.

    @JsonTypeInfo 주석을 사용하여 유형에 주석을 달고 유형 정보를 직렬화해야하는 방법을 구성해야합니다. 참고로이 페이지를 참조하십시오.

    예:

    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'}
    
  2. from https://stackoverflow.com/questions/24453703/include-class-name-in-all-objects-serialized-by-jackson by cc-by-sa and MIT license