[SPRING] Spring / json : List <MyPojo>와 같은 형식화 된 컬렉션 변환
SPRINGSpring / json : List 와 같은 형식화 된 컬렉션 변환
목록을 마샬링하려고합니다 : Spring Rest Template을 통해
간단한 Pojo 객체를 전달할 수 있지만 List
Spring은 Jackson JSON을 사용하여 HttpMessageConverter를 구현합니다. jackson 문서에서는 다음 내용을 다룹니다.
Spring 템플릿에서이 작업을 수행 할 수 있습니까? 나는 코드를 한눈에 살펴 봤지만 나에게 유익하지는 못했지만 어쩌면 나는 어떤 트릭을 모른다.
해결책
아래의 유용한 답변 덕분에 궁극적 인 해결책은 List를 보내지 않고 List를 단순히 확장하는 단일 객체를 보내는 것입니다. class PojoList extends ArrayList
해결법
-
==============================
1.MappingJacksonHttpMessageConverter에 대한 문서를 올바르게 읽으면 MappingJacksonHttpMessageConverter의 하위 클래스를 만들고 등록하고 getJavaType (Class >) 메서드를 재정의해야합니다.
MappingJacksonHttpMessageConverter에 대한 문서를 올바르게 읽으면 MappingJacksonHttpMessageConverter의 하위 클래스를 만들고 등록하고 getJavaType (Class >) 메서드를 재정의해야합니다.
protected JavaType getJavaType(Class<?> clazz) { if (List.class.isAssignableFrom(clazz)) { return TypeFactory.collectionType(ArrayList.class, MyBean.class); } else { return super.getJavaType(clazz); } }
-
==============================
2.Spring 3.2에서 RestTemplate에 대한 새로운 exchange () - 메소드를 사용하는 제네릭 형식에 대한 지원이 추가되었습니다.
Spring 3.2에서 RestTemplate에 대한 새로운 exchange () - 메소드를 사용하는 제네릭 형식에 대한 지원이 추가되었습니다.
ParameterizedTypeReference<List<MyBean>> typeRef = new ParameterizedTypeReference<List<MyBean>>() {}; ResponseEntity<List<MyBean>> response = template.exchange("http://example.com", HttpMethod.GET, null, typeRef);
매력처럼 작동합니다!
-
==============================
3.제네릭 형식 매개 변수가 포함되도록하는 한 가지 방법은 목록 또는지도 유형을 실제로 하위 클래스로 지정하는 것과 같습니다.
제네릭 형식 매개 변수가 포함되도록하는 한 가지 방법은 목록 또는지도 유형을 실제로 하위 클래스로 지정하는 것과 같습니다.
static class MyStringList extends ArrayList<String> { }
그 목록의 인스턴스를 돌려 준다.
그렇다면 이것이 왜 다른 점이 있습니까? 제네릭 형식 정보는 메서드 및 필드 선언, 수퍼 형식 선언 등 몇 가지 위치에서만 유지되므로 따라서 "raw"List에는 런타임 유형 정보가 포함되지 않지만 "MyStringList"의 클래스 정의는 해당 슈퍼 유형 선언을 통해 수행됩니다. 겉으로보기에 형식화 된 변수에 대한 할당은 도움이되지 않습니다. 실제 형식 정보는 Class 인스턴스 (또는 JavaType 및 Java 형식의 TypeReference와 같은 lib 제공 확장자)에서만 전달됩니다.
이 외에도 Jackson을 JavaType 또는 TypeReference에 전달하여 값을 전달하는 방법을 알아야합니다.
from https://stackoverflow.com/questions/6173182/spring-json-convert-a-typed-collection-like-listmypojo by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring을 사용하여 수동으로 bean을 autowire하는 방법은 무엇입니까? (0) | 2019.01.12 |
---|---|
[SPRING] Spring @Configuration 클래스 이해하기 (0) | 2019.01.12 |
[SPRING] Spring ThreadPoolTaskExecutor의 corePoolSize와 maxPoolSize의 차이점은 무엇입니까? (0) | 2019.01.12 |
[SPRING] 자바 스프링스에서 <String, List> 맵을 삽입하는 방법? (0) | 2019.01.12 |
[SPRING] java.lang.IllegalArgumentException : 형식의 반환 값에 대한 변환기가 없습니다. (0) | 2019.01.12 |