在 JAXRS-2.0 应用程序的拦截器类中获取 HTTP JSON PayLoad 作为 POJO



我正在从Apache Wink迁移到Apache CXF 2.6.2。我编写了以下代码来拦截请求:

@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()

我想做的是,我想在课堂RequestInterceptor阅读UserDataBean,因为我想做一些处理。

在 Apache Wink 中,我在方法中的拦截器类中是这样handleRequest(MessageContext context, HandlersChain chain)这样做的,如下所示:

SearchResult result = context.getAttribute(SearchResult.class);
RestfulInputBean inputBean=(RestfulInputBean)result.getInvocationParameters()[0];

基本上,您正在寻找一种访问消息正文(付费负载(本身的方法。您可以通过调用 ContainerRequestContext#getEntityStream 来执行此操作

最新更新