シナリオ
DB に格納されているさまざまな種類のオブジェクトにクライアントがアクセスできるようにする API を構築する必要があります (現在、私の DAO は Hibernate ベースです)。これらはGET
ted またはPOST
ed です。
現在、GET
署名は次のとおりです。
@RequestMapping(value = "/rest/{datatype}", method = RequestMethod.GET, produces = { "application/json" })
public @ResponseBody
Object[] getData(@PathVariable("datatype") String dataType,
WebRequest request) throws HttpException {
これは、URL のデータ型に応じて、特定のリポジトリにアクセスし、ビジネス ドメインのオブジェクトを返すことを意味します。これまでのところ問題なく動作します。
の場合POST
、JSON 形式でオブジェクトを送信し、それをクラスに変換して、データベースに格納できる必要があります。
明らかに、postFunfData(SpecificDataType object)
Jackson を使用すると、JSON をオブジェクトに正常に変換できますが、コンパイル時にオブジェクトの型がわかりません。
もう 1 つの要件は柔軟性です。ドメインに新しいクラスが追加された場合、新しいデータ型をサポートするために必要なコード作業はほとんどありません。GET
ter では、新しいデータ型をサポートするスイッチを追加し、Spring で正しいリポジトリをインスタンス化し、DB にクエリを実行します。
質問
「何でも」をリクエスト本文として受け入れ、JSON から正しいオブジェクトに変換できるようにする Spring MVC REST API を作成するにはどうすればよいですか? 何かのようなもの:
public void postData(@RequestBody Object objData){
if (objData instanceof Class1) {
Class1 obj = (Class1) objData;
Class1Repository.store(obj);
}
[...]
}