0

クラス階層があります。その上に抽象 AnswerUnit クラスがあります。OpenQuestionAnswer と MultipleChoiceQuestionAnswer の 2 つの継承クラスがあります。

データ (JSON にシリアル化されたオブジェクト) をサーバーに送信する .jsp フォームがあり、AJAX 要求とそれを処理するコントローラーのメソッドがあります。

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

「AnswerUnit回答」を引数として取りたいと思います(具象型ではなく抽象型なので、1つのメソッドでさまざまなビューからのリクエストを処理できます)。私がそれをやろうとすると問題があります - サーバーの応答は

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

その理由は、Spring (Jackson?) がどの具象クラスを作成して使用すべきかを判断できないためだと思います。クライアント側では、サーバーに送信するクラスのタイプを知っています。どの具体的なクラスを作成してリクエストを入力する必要があるかをサーバーに伝える適切な方法は何ですか?

4

1 に答える 1

3

私は応答が遅れていると思いますが、とにかく:)

http://wiki.fasterxml.com/JacksonAnnotations

これは、Jackson ポリモーフィック型処理を使用して行うことができます

@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 に「type」フィールドを追加する必要があります。

于 2014-08-07T05:48:05.330 に答える