gpt4 book ai didi

java - 处理 rest webservice url 中单个查询参数的多个值并使用 hibernate 条件处理它们

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:00 26 4
gpt4 key购买 nike

我有一个 rest web 服务,它会接受“名称”并使用这个名称从数据库中获取 token 并将 token 返回。其余 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"的 token 网址可能是这样的:

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 并将其注册到 Jersey 。

对于您的评论:您应该使用析取。

@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);
}
...
}

关于java - 处理 rest webservice url 中单个查询参数的多个值并使用 hibernate 条件处理它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12411592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com