Изменить объект @RequestBody в контроллере из фильтра - PullRequest
3 голосов
/ 23 марта 2011

Я хочу изменить объект, который уже был заполнен JacksonMapper, и автоматически добавить к нему IP-адрес и URL-адрес Referrer, но запрос всегда равен нулю, поскольку он не найден в массиве атрибутов.Я что-то не так делаю?

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>

1 Ответ

1 голос
/ 23 марта 2011

Объект, соответствующий RequestBody, создается непосредственно перед вызовом метода - его невозможно получить в фильтре.Вы можете достичь того, что хотите, реализовав Аспект.

...