アプリを開発する過程で、コントローラーで次のようなことをしていることに気付きました。
@RequestMapping(value = "foo", method = RequestMethod.POST)
@ResponseBody
public SimpleMasterWidget doStuff(@RequestBody ClientData clientData, ServerData serverData) throws Exception
{
pushClientDataToServerData(clientData, serverData);
//stuff specific to this operation on the serverData
return whatever;
}
呼び出しは、すべてのpushClientDataToServerData(clientData, serverData);POST 要求で複製されます。ここで、clientData を serverData にプッシュする必要がないことは理解していますが、これを強制するレガシー コードがあります。
現在、引数を解決するためにHandlerMethodArgumentResolverインターフェースを実装していServerDataます。重複したすべての呼び出しを削除するには、既にプッシュされている引数で引数pushClientDataToServerDataを解決できるようにしたいと考えています。ServerDataClientData
引数リゾルバーでは、にアクセスできるNativeWebRequestので、おそらくそこからリクエスト本文を取得して、それをデシリアライズすることができます。@RequestBodyただし、Spring が既にアノテーションで行っていることを再実装する必要はありません。
したがって、私の質問はこれに要約されます: 引数リゾルバーで Spring のものを呼び出して、デシリアライズされたClientDataオブジェクトを取得しpushClientDataToServerData、引数リゾルバー内で直接呼び出すことができる方法はありますか? 次に、すべてのコントローラーメソッドは次のようになります。
@RequestMapping(value = "foo", method = RequestMethod.POST)
@ResponseBody
public SimpleMasterWidget doStuff(ServerData serverData) throws Exception
{
//stuff specific to this operation on the serverData
return whatever;
}
そして、pushClientDataToServerData呼び出しは 1 か所だけになります。
前もって感謝します。