在开发我们的应用程序的过程中,我们发现自己在控制器中做了这样的事情:
@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
所以我可以通过那里获取请求主体并反序列化它等等。但是,我不想重新实现 Spring 已经对@RequestBody
注释进行的操作。
所以我的问题归结为:有没有一种方法可以在参数解析器中调用 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
电话只会在一个地方进行。
提前致谢。