2011-05-16 4 views
2

나중에 HTTP POST를 사용하기 위해 전체 HTTP POST 본문을 읽는 HTTPRequest라는 HttpServletRequestWrapper를 작성했습니다. 이 코드는 http://natch3z.blogspot.com/2009/01/read-request-body-in-filter.html저지에서 HttpServletRequestWrapper 가져 오기

의 코드를 기반으로합니다. My Jersey 서버 응용 프로그램은이 래퍼를 가져 와서 본문을 읽어야합니다. 불행히도, 어떻게 해야할지 모르겠다.

나는

@Context HTTPRequest request; 

을 퍼팅 시도했지만 그것은 (필드에 대한 의존성을 누락) 작동하지 않습니다.

내가 너무 일을 시도했다 : 다음의 HTTPRequest에 캐스팅

@Context HttpServletRequest request; 

, 그것은도 ($ ProxyXXX이의 HTTPRequest 캐스트 할 수없는) 작동하지 않았다.

인터넷에서 정보를 검색했지만 이에 관련된 내용을 찾을 수 없습니다. 어떤 생각? :)

고마워요!

답변

1

나는 꽤 이해하지 못한다 : HTTPRequest은 HttpServletRequestWrapper를 확장 한 객체인가?

저지가 @Context 주석을 통해이를 삽입하도록하려면 ContextResolver을 구현해야합니다. 실제로 귀하의 경우는 쉽게해야합니다 :

@Provider 
HTTPRequestContextResolver implements ContextResolver<HTTPRequest> { 

@Context HttpServletRequest request; 

    HTTPRequest getContext(Class<?> type) { 
     return new HTTPRequest(request); 
    } 
} 

업데이트 : 저지 동적 프록시를 사용하여 원래 요청을 감싸고 있기 때문에 이미 필터 원래 요청을 포장하는 경우, 당신은 그것을 얻을 수있는 문제가있을 수 있습니다 .

+0

정말 고마워요. 어쨌든, 나는 다른 접근법을 사용하여 그것을 해결했습니다. HttpServletRequestWrapper가 필터에있었습니다. 또한 래퍼에 의해 수신 된 원래 요청의보기가 존재했습니다. 따라서, 디버거가 전에 시계를 업데이트하기 위해 시체를 읽고있었습니다. 마지막으로 : HttpServletRequestWrapper는 getInputStream() 메소드를 POST 본문의 캐시 된 복사본으로 오버로드하므로이 InputStream을 자세히 읽고 POST 본문 자체를 가져올 수 있습니다. :) – davidcm

관련 문제