Java @JAX-RS中日期的默认值:now()和MAX

Java @JAX-RS中日期的默认值:now()和MAX,java,jersey,jax-rs,jersey-2.0,java-time,Java,Jersey,Jax Rs,Jersey 2.0,Java Time,我有一个查询参数,如下所示: @GET public Response myFunction(@QueryParam("start") final LocalDate start, @QueryParam("end") final LocalDate end) { ... } 为此,我创建了一个ParamConverter,它将字符串转换为日期,反之亦然 现在我想使用@DefaultValue注释来声明默认值。我有两个特殊的默认值: 今天(对于开始) 最大值/无穷大(对于end) 是否可以

我有一个查询参数,如下所示:

@GET
public Response myFunction(@QueryParam("start") final LocalDate start, @QueryParam("end") final LocalDate end) { ... }
为此,我创建了一个
ParamConverter
,它将字符串转换为日期,反之亦然

现在我想使用
@DefaultValue
注释来声明默认值。我有两个特殊的默认值:

  • 今天(对于
    开始
  • 最大值/无穷大(对于
    end
是否可以为此使用
@DefaultValue
注释?如何使用?

是的,在这种情况下可以使用值:

@GET
公共响应foo(@QueryParam(“开始”)@DefaultValue(“今天”)LocalDate start,
@QueryParam(“end”)@DefaultValue(“max”)LocalDate end){
...
}
您的应用程序和实现可以如下所示:

@Provider
公共类LocalDateParamConverterProvider实现ParamConverterProvider{
@凌驾
public ParamConverter getConverter(类rawType、类型genericType、,
注释[]注释){
if(rawType.getName().equals(LocalDate.class.getName())){
返回新的参数转换器(){
@凌驾
公共T fromString(字符串值){
返回parseString(值,rawType);
}
@凌驾
公共字符串到字符串(T值){
返回((LocalDateTime)值)
.格式(DateTimeFormatter.ISO\u本地\u日期);
}
};
}
返回null;
}
private T parseString(字符串值,类rawType){
如果(值==null){
返回null;
}
如果(“今天”。相等信号情况(值)){
返回rawType.cast(LocalDate.now());
}
如果(“最大”。相等信号情况(值)){
返回rawType.cast(LocalDate.of(9999,12,31));
}
试一试{
返回rawType.cast(LocalDate.parse)值,
DateTimeFormatter.ISO_LOCAL_DATE));
}捕获(例外e){
抛出新的BadRequestException(e);
}
}
}
如果出于某种原因,需要参数名,可以从
注释
数组中获取:

Optional=Arrays.stream(注释)
.filter(annotation->annotation.annotationType().equals(QueryParam.class))
.findFirst();
if(可选的.isPresent()){
QueryParam QueryParam=(QueryParam)可选。get();
字符串参数name=queryParam.value();
}