2017-03-27 1 views
1

Apache Wink에서 Apache CXF 2.6.2로 마이그레이션 중입니다. 내가 요청 가로 채기 위해 다음과 같은 코드를 작성했습니다 :JAXRS-2.0 애플리케이션의 인터셉터 클래스에서 HTTP JSON PayLoad를 POJO로 가져옴

@Provider 
public class RequestInterceptor implements ContainerRequestFilter{ 

    @Context 
    private ResourceInfo resourceInfo; 

    @Context 
    private ResourceContext resourceContext; 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
     UriInfo info = requestContext.getUriInfo(); 
     System.out.println("URI path \"/" + info.getPath() + "\" invoked on " + info.getMatchedResources()); 
     requestContext.getRequest(); 

     RestfulInputBean bean = new RestfulInputBean(); 
     IRestPreProcessor preProcessor = (IRestPreProcessor)resourceContext.getResource(resourceInfo.getResourceClass()); 

     preProcessor.preResource(bean); 
    } 
} 

을하고 다음 내 자원 클래스입니다 :

나는 서비스 모두를 호출하고
@Provider 
@Path("test") 
public class AnotherRestfulResource implements IRestPreProcessor{ 

    public MyCustomObject preResource(RestfulInputBean bean){ 
     //code 
    } 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public RestfulResultBean test(UserDataBean dataBean){ 
     //My Code 
    } 

    public RestfulResultBean postTest(MyCustomObject assembly){ 
     //My Code 
    } 
} 

것은 잘 작동하고 AnotherRestfulResource.test()는 전달 된 매개 변수와 함께 호출지고 (이 경우 사용자 이름과 암호).

나는 약간의 처리를하고 싶기 때문에 UserDataBean 안에 RequestInterceptor 클래스를 읽고 싶습니다.

아파치 윙크에

, 나는이 같은 handleRequest(MessageContext context, HandlersChain chain) 방법 내부의 인터셉터 클래스 내에서 다음과 같이 그 일을했다 : 기본적으로

SearchResult result = context.getAttribute(SearchResult.class); 

RestfulInputBean inputBean=(RestfulInputBean)result.getInvocationParameters()[0]; 

답변

0

, 당신이 찾고있는 것은 메시지 본문에 액세스하는 방법은 (페이로드입니다) 자체. ContainerRequestContext#getEntityStream

+1

예 ... 알고 있습니다 ... 컨테이너 요청 컨텍스트에서 엔티티 스트림을 읽은 경우 EOF가 스트림에 도달했다고 말하는 후속 메서드 체인에서 예외가 발생합니다. 둘째, 나는 실제 POJO를 원한다. 엔티티 스트림에서 POJO를 얻으려면 어떻게해야합니까? –

관련 문제