2017-03-27 18 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クラスを読みたいと思っています。何らかの処理をしたいからです。 Apacheのウィンクで

、私はこのようなhandleRequest(MessageContext context, HandlersChain chain)メソッド内インターセプタクラス内このようにそれをやっていた:

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

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

答えて

0

基本的には、何を探していると、メッセージ本体(ペイロードにアクセスする方法であります)それ自体。 ContainerRequestContext#getEntityStream

+1

はい...私はそれについて知っています...しかし、コンテナ要求コンテキストでエンティティストリームを読み取ると、EOFがストリームに達したという後続のメソッドチェーンで例外が発生します。第二に、私は実際のPOJOが欲しい。エンティティストリームからPOJOを取得するにはどうすればよいですか? –

関連する問題