[英]Handling multiple values for a single query parameter in a rest webservice url and handling them using hibernate criteria
我有一個休息的Web服務,它接受'name'並從db獲取帶有此名稱的令牌並返回令牌。 其余web服務的URL將是:
http://localhost:8080/NameService/Tokens?name=Bob
在serviceLayer中,我的方法如下:
@GET
@Path("Tokens")
@Produces("application/xml")
public JAXBElement<GetToken> getokenByName(@QueryParam("name") final String name ) {
if(name!=null){
// use hibernate criteria to fetch the records from db
Criteria crit = getSession().createCriteria(getPersistentClass());
crit.add(Restrictions.eq("name",name))
}
}
現在,當客戶端可以同時在請求中發送多個名稱時,我們對需求進行了更改。例如,給我一個其中name =“bob”或“brendon”或“aaron”的標記URL可以是這樣的:
http://localhost:8080/NameService/Tokens?name=Bob,Aaron,Brendon
發送的名稱數量是可變的。 它可以是1或2或3等。 有關如何通過調整上面顯示的代碼來實現這種拆分並將它們作為OR條件傳遞給hibernate條件的任何想法,這些代碼適用於一個名稱?
一種方法可能是使用StringUtils
使用分隔符(逗號)解析出不同的名稱,然后形成一個列表,以及如何將列表中的名稱添加到條件限制中。 但不確定這是否有效。
有任何想法嗎?
實際上,最簡單的方法是使用split(",")
拆分查詢參數。
您還可以將查詢參數設置為List<String>
並傳遞如下參數:
http://localhost:8080/NameService/Tokens?name=Bob&name=Aaron&name=Brendon
或者您也可以實現自己的StringReaderProvider
並將其注冊到澤西。
對於你的評論:你應該使用析取。
@GET
@Path("Tokens")
@Produces("application/xml")
public JAXBElement<GetToken> getokenByName(@QueryParam("name") final String names) {
if (names != null) {
Criteria crit = getSession().createCriteria(getPersistentClass());
Disjunction disjunction = Restrictions.disjunction();
for (String name: names.split(",")) {
disjunction = disjunction.add(Restrictions.eq("name", name));
}
crit.add(disjunction);
}
...
}
你分裂字符串的想法是有效的。 您還可以檢查一些REST服務在行業中的完成情況。 查看linkedin人員搜索API
使用正則表達式檢查@Path
注釋的靈活性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.