如何在CXF中基于JAX-RS的Service的RequestHandler中获取参数名称和值

时间:2012-05-24 18:09:16

标签: rest cxf jax-rs

我正在CXF中创建基于JAX-RS的Web服务,我希望将RequestHandler中传递给<jaxrs:provider>的方法的参数传递给public class SampleRequestHandler implements RequestHandler { @Override public Response handleRequest(Message arg0, ClassResourceInfo arg1) { OperationResourceInfo resourceInfo = arg0.getExchange().get(OperationResourceInfo.class); String name = resourceInfo.getMethodToInvoke().getName(); return null; } }

我想要处理程序中的参数名称和相应的值,这是我的代码:

@Service("bookService")
@Path("/bookstore")
public class BookStore {

    @POST
    @Path("/books")
    @Produces({ "application/xml" })
    @Consumes({ "application/xml" })
    public Book addBook(Book book) {
        return book;
    }

}

基于JAX-RS的服务:

beans.xml

和我<context:component-scan base-package="com.tutorial.cxf.jaxrs.service"/> <bean id="sampleHandler" class="com.tutorial.cxf.jaxrs.interceptors.SampleRequestHandler"/> <jaxrs:server id="restContainer" address="/"> <jaxrs:serviceBeans> <ref bean="bookService"/> </jaxrs:serviceBeans> <jaxrs:providers> <ref bean="sampleHandler"/> </jaxrs:providers> </jaxrs:server> 我注册了处理程序和休息服务的地方:

{{1}}

有人已经管理过此案吗?

1 个答案:

答案 0 :(得分:0)

尝试使用以下方法时遇到了同样的问题:

List<Parameter> params = ori.getParameters();

它只返回参数的名称(在方法中声明的名称),但不返回值。

官方watch a video只显示了一些内容,但正如所解释的那样,您始终可以获取邮件的QUERY_STRING值并进行解析。

您可以在处理程序/过滤器中执行以下操作:

String queryString = (String) arg0.get(Message.QUERY_STRING);
MultivaluedMap<String, String> queryMap = JAXRSUtils.getStructuredParams(queryString, "&", false, false);

并循环遍历queryMap集合。该映射将包含所有查询参数,甚至包含未在BookStore类的Rest方法中声明的参数。