Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在CXF restful webservice中处理动态查询参数_Java_Web Services_Rest_Cxf_Cxf Client - Fatal编程技术网

Java 在CXF restful webservice中处理动态查询参数

Java 在CXF restful webservice中处理动态查询参数,java,web-services,rest,cxf,cxf-client,Java,Web Services,Rest,Cxf,Cxf Client,我想在CXF RESTful服务中处理动态查询参数 我关心的是服务端,我不知道请求附带的参数/密钥名称的数量。你能告诉我我们如何处理这种情况吗 例如,我的客户端代码如下所示, Map<String, String> params = new HashMap<>(); params.put("foo", "hello"); params.put("bar", "world"); WebClient webClient = WebClient.create("http://

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

我关心的是服务端,我不知道请求附带的参数/密钥名称的数量。你能告诉我我们如何处理这种情况吗

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

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(); 
Map params=newhashmap();
参数put(“foo”,“hello”);
参数put(“酒吧”、“世界”);
WebClient WebClient=WebClient.create(“http://url"); 
for(条目:params.entrySet()){
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 "";

}
公共字符串getDynamicParameter(@Context-UriInfo-ui){
System.out.println(ui.getQueryParameters());
多值map=ui.getQueryParameters();
Set keys=map.keySet();
Iterator it=keys.Iterator();
while(it.hasNext()){
String key=it.next();
System.out.println(“Key-->”+Key+“Value”+map.get(Key.toString());
}
返回“”;
}
但是,你能告诉我下面的情况吗

  • 是否为标准方式
  • 还有,还有其他方法可以实现吗
  • CXF版本:3.1.4

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

    • :返回包含当前请求的查询参数的名称和值的不可修改映射。对参数名称和值中的所有转义八位字节序列进行解码,相当于
    • :返回包含当前请求的查询参数的名称和值的不可修改映射
    可以使用注释将插入到资源类成员中:

    @Path(“/foo”)
    公共类资源{
    @上下文
    私人UriInfo UriInfo;
    @得到
    公众回应方法(){
    多值Map queryParams=uriInfo.getQueryParameters();
    ...
    }
    }
    
    并可注入方法参数中:

    @GET
    公共响应方法(@Context-UriInfo-UriInfo){
    多值Map queryParams=uriInfo.getQueryParameters();
    ...
    }
    
    要获取未解析的查询字符串,请执行以下操作:

    @GET
    public Response someMethod(@Context UriInfo uriInfo) {
        String query = uriInfo.getRequestUri().getQuery();
        ...
    }
    
    从HttpServletRequest获取查询参数 您可以通过注入注释来获得类似的结果,就像上面提到的那样。以下是一些有用的方法:

    • :返回包含请求中发送的参数的名称和值的不可变映射
    • :返回包含请求中包含的参数名称的
    • :返回包含给定请求参数的所有值的数组
    • :返回请求参数的值。应仅在确定参数只有一个值时使用。否则,只返回给定参数名的第一个值
    • :返回请求URL中包含的查询字符串

    看看我的最新答案。