2011-03-23 51 views
2

我想修改一个已经用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> 
+0

过滤器在哪里被实例化?当你说你无法获得这些属性时,你的意思是在客户端? – 2011-03-23 05:07:27

+0

我想修改请求过滤器中的@RequestBody FollowRequest请求,然后它进入控制器,这样我可以在该对象中拥有IP和引用。过滤器在我上面添加的web.xml中实例化。 – 2011-03-23 15:57:12

回答

1

对应于RequestBody该目的只是该方法之前创建的调用 - 有没有办法在过滤器中保留它。你可以通过实施一个方面来实现你想做的事情。

+0

那么糟透了。 – 2011-03-23 17:12:38