我正在从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 来执行此操作