반응형
Spring @ReponseBody @RequestBody(추상 클래스 포함)
내가 수업이 세 개 있다고 가정해 보자.
public abstract class Animal {}
public class Cat extends Animal {}
public class Dog extends Animal {}
이런 거 해도 돼요?
입력: JSON(개 또는 고양이)
출력: 개/고양이는 입력 객체 유형에 따라 달라집니다.
아래 코드가 왜 작동하지 않는지 모르겠어요.아니면 새로운 개와 고양이를 다루는데 두 가지 방법을 사용해야 할까요?
@RequestMapping(value = "/animal", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
private @ResponseBody <T extends Animal>T insertAnimal(@RequestBody T animal) {
return animal;
}
오류 메시지:
HTTP Status 500 - 요청 처리에 실패했습니다.네스트된 예외는 java.lang입니다.부정 인수예외:유형 변수 'T'를 확인할 수 없습니다.
제가 방금 답을 찾았는데, 여기 참고 링크가 있습니다.
내가 한 것은 추상 클래스 위에 코드를 추가한 것이다.
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.*;
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Cat.class, name = "cat"),
@JsonSubTypes.Type(value = Dog.class, name = "dog")
})
public abstract class Animal{}
그리고 HTML의 json 입력에서
var inputjson = {
"type":"cat",
//blablabla
};
json을 전송하고 마지막으로 컨트롤러에서
@RequestMapping(value = "/animal", method = RequestMethod.POST, produces = "application/json; charset=utf-8", consumes=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody insertanimal(@RequestBody Animal tmp) {
return tmp;
}
이 경우 변수 tmp가 자동으로 변환됩니다.Dog
또는Cat
오브젝트, json 입력에 따라 달라집니다.
언급URL : https://stackoverflow.com/questions/27170298/spring-reponsebody-requestbody-with-abstract-class
반응형
'it-source' 카테고리의 다른 글
LIKE 연산자에 여러 조건을 도입하려면 어떻게 해야 하나요? (0) | 2023.02.16 |
---|---|
파라미터를 jQuery의 .load()에 전달하는 가장 좋은 방법 (0) | 2023.02.16 |
spring에서 2개 이상의 데이터베이스를 사용하는 방법 (0) | 2023.02.12 |
SQL*PLUS for Oracle을 대체할 수 있는 좋은 방법이 있습니까? (0) | 2023.02.12 |
wordpress rest api v2 분류법 용어를 나열하는 방법? (0) | 2023.02.12 |