[英]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.