2

我正在 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;
    }
}

我的基于 JAX-RS 的服务:

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

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

}

以及我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>

有人已经处理过这个案子了吗?

4

1 回答 1

0

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

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

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

CXF官方文档只展示了一点点,但正如解释的那样,您始终可以获取消息的 QUERY_STRING 值并对其进行解析。

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

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

并在对 queryMap 集合进行循环之后。该地图将包含您的所有查询参数,即使是未在 BookStore 类的 Rest 方法中声明的参数。

于 2017-04-25T17:01:48.583 回答