我有一个类层次结构。在它的顶部有一个抽象的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.
我认为原因是斯普林(杰克逊?)无法找出他应该创建和使用哪个具体类。在客户端,我知道我发送到服务器的类类型。告诉服务器应该创建哪个具体类并填充我的请求的正确方法是什么?
我的回复迟到了,但无论如何:)
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 中。