2012-08-11 6 views
0

클래스 계층 구조가 있습니다. 그 위에 추상 AnswerUnit 클래스가 있습니다. OpenQuestionAnswer와 MultipleChoiceQuestionAnswer라는 두 개의 상속 클래스가 있습니다.@ResponseBody + 상속의 Spring MVC + JSON

데이터 (JSON에 직렬화 된 개체)를 AJAX 요청과 함께 서버로 보내고이를 처리 할 컨트롤러의 메서드를 보내는 .jsp 폼이 있습니다.

@RequestMapping(value = "/test", method = RequestMethod.POST) 
    public @ResponseBody 
    String testPostMethod(@RequestBody 
    OpenQuestionAnswer answer) { 
     return "home"; 
    } 

내가 인수로 "AnswerUnit 대답은"취할 수 있도록하고 싶습니다 (대신 구체적인 유형의 추상 형식을, 그래서 하나의 방법으로 다른 관점에서 요청을 처리 할 수있다). 나는 문제가 그것을 할 때 - 서버 respose 나는 이유는 봄 (? 잭슨은) 그가 만들어 사용한다 콘크리트하는 클래스를 찾을 수 없습니다 있다는 것을 생각

400 BAD REQUEST he request sent by the client was syntactically incorrect.

입니다 . 클라이언트 측에서는 서버에 보내는 클래스 유형을 알고 있습니다. 서버에 구체적인 클래스를 만들어서 요청으로 채워야한다고 알리는 올바른 방법은 무엇입니까?

+0

예제에서 구체적인 유형을 보여 줬습니다 - OpenQuestionAnswer' 구체적인 유형을 가지고도이 오류가 발생합니까? 로그 레벨을 DEBUG로 낮추고 다른 메시지가 나타나는지 확인할 수 있습니까? –

+0

분명한 것처럼 보이지만 JSON POST (코드가 표시되지 않는다고 가정 할 수 없음)에서 구체적인 클래스에 대한 메소드를 참조하고 있습니까? 상속을 포기하고 대신 컴포지션을 사용해야 할 수도 있습니다 (http://stackoverflow.com/questions/2399544/difference-between-inheritance-and-composition) – nickdos

답변

2

어쨌든 내가 응답 늦게 것 같아,하지만 :)

http://wiki.fasterxml.com/JacksonAnnotations

당신이 사용 잭슨 다형성 유형 처리

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") 
@JsonSubTypes(value = { 
    @JsonSubTypes.Type(name = "answer", value = OpenQuestionAnswer.class), 
    @JsonSubTypes.Type(name = "multiple", value = MultipleChoiceQuestionAnswer.class) 
}) 
public class AnswerUnit 
... 

을 가질 수 있습니다하지만 당신은 추가해야합니다 "유형을 "필드를 클라이언트 JSON에 연결합니다.

+1

굉장! 고마워요 / – bosco

관련 문제