2

AJAX が普及する前は、カスタム プロパティ エディターを使用してコントローラーに登録することで、id とエンティティの間で変換することができました。したがって、Userフォーム バッキング オブジェクトに が含まれていたCompany場合、company.id5 の場合、Spring はカスタム プロパティ エディタを呼び出して、ID を持つ Company を取得し、5それをプロパティに設定できるようにしますuser.company

Ajax のやり方では、同様の要件があります。フォーム バッキング オブジェクトを使用する代わりに、オブジェクトの HTTP POST または PUT をUserJSON データとして実行し、Spring でその JSON をユーザー オブジェクトに自動的に変換します。Spring は、@RequestBodyアノテーションと、Jackson を使用して JSON を Java オブジェクトにマーシャリングすることで、これを可能にしました。

これは単なる架空の例です。適切なゲッター/セッターUserを持つオブジェクトを含むと想像してください。Company

@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void create(@Valid @RequestBody User user) {
    userService.saveUser(user);
}

Spring に関する限り、プロパティ エディターは過去のものであるため、新しい Conversion Service API を使用することが期待されています。私のアプリケーションでは、古いプロパティ エディターが以前行っていた処理 (ID をエンティティに戻す変換) を行うファクトリを正常に作成できました。

私の質問は、Jackson が JSON データをマーシャリングしている間またはその後に、Spring が変換サービスを呼び出せるようにするにはどうすればよいかということです。custom を作成できることはわかっていますがJsonDeserializer、これらの作成/テストは、膨大な数のエンティティに対して行う必要があるため、苦痛で時間のかかるプロセスであり、各デシリアライザーには 60 ~ 200 行のコードが必要です。各。

フォームバッキングオブジェクトの場合と同じように、Spring が私に代わって ID からエンティティへのマッピングを行うことができれば幸いです。方法はありますか?

4

2 に答える 2

0

この場合、ルート オブジェクトでのみ機能し、Userネストされたコンポーネントでは機能しません。Spring Data REST には、参照できる「DomainClassConverter」があります。

基本的に、要求されたオブジェクトを変換できるかどうか (つまり、 /ConditionalGenericConverterによってロードできるかどうか) をチェックするものを作成します。(無条件バージョンはこちら.EntityManagerSessionFactory

サーバー側でルックアップを行うには、(基本的に) REST に少し反します。これは、要求と共に必要なものすべてを送信する必要があるためです (Representational State Transfer およびすべての状態の転送エンジンとしてのハイパーメディア)。しかし、それは別の議論のためです:)。

リンク

  1. ドメイン エンティティ コンバーターのブログ
  2. 春のリファレンスガイド
于 2013-09-30T07:57:18.597 に答える