アプリを開発する過程で、コントローラーで次のようなことをしていることに気付きました。
@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
を解決できるようにしたいと考えています。ServerData
ClientData
引数リゾルバーでは、にアクセスできる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 か所だけになります。
前もって感謝します。