如何使用查询参数执行此@Path
参数的等效操作?
@Path(“/ history / {startDate:[0-9] [0-9] [0-9] [0-9] - [0-1] [0-9] - [0-3] [0-9]} / {endDate:[0-9] [0-9] [0-9] [0-9] - [0-1] [0-9] - [0-3] [0- 9]}“)
哪个匹配此URI:
/history/1914-01-20/2014-01-20/
但现在我需要匹配这个:
/history/123456?end=2024-01-20&start=2014-11-12
此代码有效,但没有针对start
参数和end
参数的验证:
@Path( “/历史”)
public Response getHistory( @QueryParam(“start”)字符串开始,
@QueryParam("end") String end){
/ *** foo *** /
}
答案 0 :(得分:0)
您使用的是JAX-RS(或Jersey)的哪个版本?
从版本2开始,您可以使用Bean验证(https://weblogs.java.net/blog/bhaktimehta/archive/2013/10/30/jax-rs-and-bean-validation)
或者在您的示例,实体提供商(如
)的情况下更复杂一些https://blogs.oracle.com/arungupta/entry/jax_rs_custom_entity_providers
但是版本是JAX-RS 2.
答案 1 :(得分:0)
因为我被告知没有"匹配"对于查询参数,我发现了另外两种处理方法:
方法#1:使用正则表达式
//in my includes
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//In my @GET endpoint
Pattern startPattern = Pattern.compile("[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]");
Matcher startMatcher = startPattern.matcher(assigned);
if (startMatcher.find()) {
System.out.println("Matched!");
} else {
System.out.println("Did not match!");
}
方法#2:在您的实施中需要某种数据类型
我无法将此编写为特定于您的实现,但在我的实现中,我需要一个TIMESTAMPTZ用于我的数据库行。当QueryParam
在SQL查询期间不匹配时,Jax-RS会抛出错误。