it-source

Spring @ReponseBody @RequestBody(추상 클래스 포함)

criticalcode 2023. 2. 16. 21:46
반응형

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

반응형