【问题标题】:Modify @RequestBody object in Controller From Filter从过滤器修改控制器中的@RequestBody 对象
【发布时间】:2011-03-23 05:01:31
【问题描述】:

我想修改一个已经用 JacksonMapper 填充的对象,并自动将 IP 和 Referrer URL 添加到它,但请求始终为空,因为在属性数组中找不到它。我是不是做错了什么?

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 FollowRequest 请求,然后再将其发送到控制器,以便我可以在该对象中拥有 IP 和引用者。过滤器在我上面添加的 web.xml 中实例化。
  • 可以修改请求正文,看这里:stackoverflow.com/questions/50932518/…

标签: spring-mvc filter controller


【解决方案1】:

与 RequestBody 对应的对象是在调用该方法之前创建的 - 无法在过滤器中获取它。你可以通过实现一个方面来实现你想做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2018-06-18
    • 1970-01-01
    相关资源
    最近更新 更多