在 CXF restful 网络服务中处理动态查询参数

Handling dynamic query parameter in CXF restful webservice

我想在 CXF RESTful 服务中处理动态查询参数。

我担心的是服务端我不知道请求附带的 parameters/key 个名称的数量。你能告诉我我们如何处理这个吗situation/scenario。

例如我的客户端代码如下所示,

Map<String, String> params = new HashMap<>();
params.put("foo", "hello");
params.put("bar", "world");

WebClient webClient = WebClient.create("http://url"); 
for (Entry<String, String> entry : params.entrySet()) {
    webClient.query(entry.getKey(), entry.getValue());
}

Response res = webClient.get(); 

下面的代码很适合我,

public String getDynamicParamter(@Context UriInfo ui){
    System.out.println(ui.getQueryParameters());
    MultivaluedMap<String, String> map = ui.getQueryParameters();
    Set keys=map.keySet();
    Iterator<String > it = keys.iterator();
    while(it.hasNext()){
        String key= it.next();
        System.out.println("Key --->"+key+"  Value"+map.get(key).toString());
    }
    return "";

}

不过,能否请您告诉我以下内容,

  1. 是否是标准方式?
  2. 还有,还有其他方法可以实现吗?

CXF 版本:3.1.4

UriInfo

获取查询参数

正如您已经猜到的,UriInfo API 中有一些方法将为您提供查询参数:

  • getQueryParameters(): Returns an unmodifiable map containing the names and values of query parameters of the current request. All sequences of escaped octets in parameter names and values are decoded, equivalent to getQueryParameters(true).
  • getQueryParameters(boolean): Returns一个不可修改的映射,包含当前请求的查询参数的名称和值。

UriInfo can be injected in a resource class member using the @Context注解:

@Path("/foo")
public class SomeResource {

    @Context
    private UriInfo uriInfo;

    @GET
    public Response someMethod() {
        MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
        ...
    }
}

并且可以在方法参数中注入:

@GET
public Response someMethod(@Context UriInfo uriInfo) {
    MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
    ...
}

要获取未解析的查询字符串,请执行以下操作:

@GET
public Response someMethod(@Context UriInfo uriInfo) {
    String query = uriInfo.getRequestUri().getQuery();
    ...
}

HttpServletRequest

获取查询参数

你可以通过注入 HttpServletRequest@Context 注释来获得类似的结果,就像上面提到的UriInfo。以下是一些有用的方法: