[英]Handling dynamic query parameter in CXF restful webservice
我想在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();
以下代码对我来说很好用,
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 "";
}
但是,请让我知道以下内容,
CXF版本:3.1.4
UriInfo
获取查询参数 您已经猜到了, UriInfo
API中有一些方法可以为您提供查询参数:
getQueryParameters()
:返回一个不可修改的映射,其中包含当前请求的查询参数的名称和值。 对参数名称和值中所有转义八位字节的序列进行解码,等效于getQueryParameters(true)
。 getQueryParameters(boolean)
:返回一个不可修改的映射,其中包含当前请求的查询参数的名称和值。 该UriInfo
可以使用的资源类成员被注入@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
提到的UriInfo
一样。 以下是一些有用的方法:
getParameterMap()
:返回一个不变的映射,其中包含在请求中发送的参数的名称和值。 getParameterNames()
:返回一个Enumeration
其中包含请求中包含的参数的名称。 getParameterValues(String)
:返回一个数组,其中包含给定请求参数的所有值。 getParameter(String)
:返回请求参数的值。 仅在确定参数只有一个值时才应使用。 否则,将仅返回给定参数名称的第一个值。 getQueryString()
:返回请求URL中包含的查询字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.