使用 Mime 类型的 Rest 版本控制 - */* 的默认版本

标签 rest jax-rs versioning mime-types

我已经通过定义供应商 mime 类型使用 CXF 在我的 REST 服务上实现了版本控制,该类型在传递正确的接受 header 时可以正常工作。

但是,当客户端不传递接受 header 但传递 asterix/asterix 时,我的服务默认返回服务的第一个版本。

好的,这是正确的,因为客户已指定他们接受任何内容,但我希望它默认为第二个最新版本的服务。

有没有办法指定此服务是在这种情况下应使用的默认服务?

谢谢

服务一注释:

@GET
@Path("/")
@Produces(value = {CustomMediaType.APPLICATION_CUSTOM_MEDIATYPE_JSON_V1})

服务二注解:

@GET
@Path("/")
@Produces(value = {MediaType.APPLICATION_JSON,CustomMediaType.APPLICATION_CUSTOM_MEDIATYPE_JSON_V2})

最佳答案

下面的解决方案只适用于同时维护 2 个版本:

删除旧版本 (v1) 的@Produces。

这将强制在 v1 上使用通配符,(因此)与 v2 中的@Produce 相比不那么具体

  • 没有 MediaType,调度程序将选择最具体的方法(因此,版本 2)。
  • 对于 MediaType 版本 1,唯一的匹配项是通配符 => getObjectV1。
  • 对于 MediaType 版本 2,有两个匹配项(v1 和 v2),但 v2 更具体 => getObjectV2

    @GET
    @Path("/")
    public Object getObjectV1(){
    }
    
    @GET
    @Path("/")
    @Produces(value ={CustomMediaType.APPLICATION_CUSTOM_MEDIATYPE_JSON_V2})
    public Object getObjectV2(){
    }

http://bill.burkecentral.com/2013/05/29/the-poor-jax-rs-request-dispatching-algorithm/

关于使用 Mime 类型的 Rest 版本控制 - */* 的默认版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20187781/

相关文章:

javascript - AngularJS:用户可以注册两次,如何防止这种情况?

javascript - jQuery 文件名

java - 如何在Spring Data MongoDB中实现聚合查询?

rest - 将 SparkPost 与 XHR 结合使用时出现 401 错误

java - 使用 Rest API 在 Azure IoT 中心创建共享访问策略

java - RESTful Web 服务生命周期“总是”每个请求?

java - spring mvc中如何获取方法请求

java - JAX-RS 仅运行一个函数一次

android - 是否可以从 Android 中的库项目访问 App 的版本?

versioning - 其他开发团队如何处理版本号?