修改控制器中的@RequestBody对象从过滤器
问题描述:
我想修改一个已经用JacksonMapper填充的对象,并自动添加IP和引用URL到它,但请求始终为空,因为它在属性中找不到阵列。难道我做错了什么?修改控制器中的@RequestBody对象从过滤器
ApiController.java
@RequestMapping(value="/member/follow")
public @ResponseBody IHttpResponse follow(@RequestBody FollowRequest request) {
return request.getHttpResponse();
}
ApiRequestWrapper.js
public class ApiRequestWrapper extends HttpServletRequestWrapper
{
public ApiRequestWrapper(HttpServletRequest request) {
super(request);
if(this.getAttribute("request") instanceof IHttpRequest)
{
IHttpRequest httpRequest = (IHttpRequest) this.getAttribute("request");
if(httpRequest != null)
{
httpRequest.setIp(request.getRemoteAddr());
httpRequest.setReferrer(request.getLocalName());
}
}
}
}
Web.xml中
<filter>
<filter-name>apiFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>apiFilter</filter-name>
<url-pattern>/api/*</url-pattern>
</filter-mapping>
答
对应于RequestBody该目的只是该方法之前创建的调用 - 有没有办法在过滤器中保留它。你可以通过实施一个方面来实现你想做的事情。
+0
那么糟透了。 – 2011-03-23 17:12:38
过滤器在哪里被实例化?当你说你无法获得这些属性时,你的意思是在客户端? – 2011-03-23 05:07:27
我想修改请求过滤器中的@RequestBody FollowRequest请求,然后它进入控制器,这样我可以在该对象中拥有IP和引用。过滤器在我上面添加的web.xml中实例化。 – 2011-03-23 15:57:12