[SPRING] Spring @RequestBody - 다른 유형의 목록을 포함하지만 (동일한 인터페이스)
SPRINGSpring @RequestBody - 다른 유형의 목록을 포함하지만 (동일한 인터페이스)
도메인 클래스가 있다고 가정 해 보겠습니다.
public class Zoo{
private List<Animal> animals;
....
여기서 Animal은 다른 구현 (Cat, Dog)을 가진 인터페이스입니다. Zoo 객체를 저장할 수 있기를 원한다고 가정 해 봅시다.
@RequestMapping(value = "/zoo", method = RequestMethod.POST)
public @ResponseBody void save(@RequestBody Zoo zoo) {
....
나는 json을 보내고 싶다.
{
animals:[
{type:'Cat', whiskers-length:'3'},
{type:'Dog', name:'Fancy'}
]
}
타입 == 'Cat'일 때 동물을 Cat 타입으로 매핑하고, 타입 == 'Dog'일 때 Dog 클래스로 매핑하도록 봄 MVC에 어떻게 말할 수 있습니까?
해결법
-
==============================
1.polymorphic json을 얻으려면 Jackson 주석 @JsonTypeInfo와 @JsonSubTypes를 사용해야합니다. 주석은 Animal 기본 클래스로 이동합니다.
polymorphic json을 얻으려면 Jackson 주석 @JsonTypeInfo와 @JsonSubTypes를 사용해야합니다. 주석은 Animal 기본 클래스로 이동합니다.
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type") @JsonSubTypes({@JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat")}) public abstract class Animal { }
-
==============================
2.지금 간단한 주석이 있습니다.
지금 간단한 주석이 있습니다.
@JsonRootName("dog") public class Dog extends Animal {...}
주석에 대한 참조는 fasterxml.github에서 찾을 수 있습니다.
from https://stackoverflow.com/questions/17247189/spring-requestbody-containing-a-list-of-different-types-but-same-interface by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안 : 초기 타겟 URL을 얻는 방법 (0) | 2019.01.17 |
---|---|
[SPRING] PropertyDescriptor의 동작이 Java 1.6에서 1.7로 변경된 이유는 무엇입니까? (0) | 2019.01.17 |
[SPRING] Spring AMQP Listener Container의 동시성은 어떻게 구현되고 있는가? (0) | 2019.01.17 |
[SPRING] JPA 페이지 가능 객체의 기본 페이지 크기 설정 (0) | 2019.01.17 |
[SPRING] 스프링 jdbc 템플릿에서 autocommit을 false로 설정하는 방법 (0) | 2019.01.17 |