在开发应用程序的过程中,我们发现自己在控制器中做了类似的事情:
@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;
}
The pushClientDataToServerData(clientData, serverData);
每个 POST 请求中都会重复调用。现在,我明白实际上不需要将 clientData 推送到 serverData,但是遗留代码迫使我们这样做。
目前我们正在实施处理程序方法参数解析器 http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/method/support/HandlerMethodArgumentResolver.html接口来解决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;
}
And the pushClientDataToServerData
呼叫只能在一个地方进行。
提前致谢。