@ResponseBody +继承中的Spring MVC + JSON

时间:2012-08-11 13:52:52

标签: ajax json spring

我有一个类层次结构。在它的顶部有一个抽象的AnswerUnit类。有两个继承类:OpenQuestionAnswer和MultipleChoiceQuestionAnswer。

我有一个.jsp表单,它使用AJAX请求将数据(对象序列化为JSON)发送到服务器,并在控制器中处理它。

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

我希望能够将“AnswerUnit answer”作为参数(抽象类型而不是具体类型,因此我可以使用一种方法处理来自不同视图的请求)。当我尝试这样做有一个问题 - 服务器休息是

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

我认为原因是Spring(杰克逊?)无法找出他应该创建和使用的具体课程。 在客户端,我知道我发送给服务器的类的类型。 告诉服务器应该创建哪个具体类并填充我的请求的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

我想我的反应很晚,但无论如何:)

http://wiki.fasterxml.com/JacksonAnnotations

您可以使用Jackson Polymorphic类型处理

@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。