gpt4 book ai didi

java - 使用后匹配请求过滤器覆盖 JAXRS @QueryParameter 值

转载 作者:行者123 更新时间:2023-12-02 08:55:49 26 4
gpt4 key购买 nike

我有一个方法,其中我需要根据某些计算覆盖查询参数的值:

@GET
@Path("/channel")
@Produces(MediaType.APPLICATION_JSON)
@OptimizedDate
public FancountAndChannel computeFanCount(
@QueryParam("artist") String artistId,
@OptimizableDate @QueryParam("date") Integer date, //override this using filters
@QueryParam("channel") String channel) {

//do stuffs here
}

我的过滤器如下所示:

@OptimizedDate
public class OptimizedDateFilter implements ContainerRequestFilter {

@Override
public void filter(ContainerRequestContext context) throws IOException {
if (//certain condition) {
//im hoping this method would change the "date" value
Integer optimizedDate = //compute date here
updateDateParameter(context, "date", optimizedDate );
}
}

private void updateDateParameter(ContainerRequestContext context, String fieldName, Integer optimizedDate) {

//TODO: wont work, only for post-matching filters
URI oldUri = context.getUriInfo().getRequestUri();
URI newUri = null;
try {
newUri = new URIBuilder(oldUri).setParameter(fieldName, String.valueOf(optimizedDate)).build();
} catch (URISyntaxException e) {
e.printStackTrace();
}
LOGGER.debug("oldUri={}\nnewUri={}", oldUri, newUri);
context.setRequestUri(newUri);

//TODO: wont work: query parameters are immutable
//context.getUriInfo().getQueryParameters().putSingle(fieldName, String.valueOf(optimizedDate));
//context.getUriInfo().getQueryParameters().add(fieldName, Arrays.asList(String.valueOf(optimizedDate)));
}

我想覆盖该值,或设置它(当其为空时)。然而,我尝试过的大多数方法都是使用不可变对象(immutable对象)。

有没有更好的方法使用过滤器来做到这一点?我可能必须在很多方法中应用相同的逻辑,复制粘贴不是我的风格。

要求摘要:

  1. 值将在运行时计算和决定
  2. 逻辑仅应用于各种 JAXRS 端点

最佳答案

如果您只想在其为空时设置一个值,则使用 @DefaultValue("您想要的默认值")

  public FancountAndChannel computeFanCount(
@QueryParam("artist") String artistId,
@OptimizableDate @DefaultValue("default value you want") @QueryParam("date") Integer date, //override this using filters
@QueryParam("channel") String channel) {

}

关于java - 使用后匹配请求过滤器覆盖 JAXRS @QueryParameter 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39944398/

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