jax-rs - 以向后兼容的方式为 JerseyClient 将 @QueryParam 添加到 JAX-RS 现有 API
问题描述
我有一个现有的 API。
@Api
@Path("/resourceA/v1")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface ResourceA
{
@GET
@Path("{id : .+}")
getResourceById(@PathParam("id") String id);
}
我们需要@QueryParam
向该 API 添加一个新的可选参数 (with ),但我们不想破坏使用此 java 接口调用我们的资源的现有 Jersey 客户端。我们不能简单地将其添加@QueryParam
到现有方法中,因为这会破坏向后兼容性,我们仍然希望现有客户端像以前一样工作,只有其中一些需要新参数。
到目前为止,我已经尝试过:
方法一:在接口上使用默认实现。这在客户端上失败,因为泽西客户端使用带有方法拦截器的代理对象,这与default
接口的实现不能很好地配合。
@Api
@Path("/resourceA/v1")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface ResourceA
{
default getResourceById(@PathParam("id") String id)
{
return getResourceById(id, null);
}
@GET
@Path("{id : .+}")
getResourceById(@PathParam("id") String id, @QueryParam("param") String param);
}
方法二:添加方法的重载getResourceById
。然后在我实现方法的服务器端,我管理过载。这不会引发任何错误,但我在服务器端有一个不确定的行为,有时它会调用该方法而param
有时它不会调用该方法,如果param
URL 中存在该方法。
@Api
@Path("/resourceA/v1")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface ResourceA
{
@GET
@Path("{id : .+}")
getResourceById(@PathParam("id") String id);
@GET
@Path("{id : .+}")
getResourceById(@PathParam("id") String id, @QueryParam("param") String param);
}
我想知道 JAX-RS 是否有此类修改的最佳实践方法?
谢谢。
解决方案
推荐阅读
- selenium - WebDriverException:未知错误:无法解压缩“文件”
- r - 具有离散 x 轴的 geom_density() 分组图不平滑
- arangodb - 将 MongoDB 聚合转换为 ArangoDB COLLECT
- kubernetes - Minikube Kubernetes:两个 pod 和服务
- javascript - 如何为此按钮添加“onclick”事件
- c# - 未知“?” 使用 ChromeDriver 从网站读取
- node.js - 快递找不到路线
- vb.net - OTA QC ALM:ActiveX 组件无法创建对象:Set Scheduler = theTestSet.StartExecution("")
- r - 为什么我不断收到错误“无效的‘标签’;长度 2 应该是 1 或 3”
- java - 装饰器模式 - 未定义的构造函数