使用Mime类型进行静态版本控制 - * / *的默认版本

时间:2013-11-25 08:28:17

标签: rest jax-rs versioning mime-types

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

但是,当客户端没有传递接受标头但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 个答案:

答案 0 :(得分:1)

以下解决方案仅适用于同时维护2个版本:

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

这会强制在v1上使用WildCard,因此(<)> 不那么具体比v2中的@Produce

  • 如果没有MediaType,调度程序将选择最具体的方法(因此,版本2)。
  • 使用MediaType版本1,唯一的匹配将是通配符=&gt; getObjectV1。
  • 使用MediaType版本2,有两个匹配项(v1和v2),但v2更具体=&gt; 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/

答案 1 :(得分:0)

只需添加*/*

@Produces(value = {MediaType.WILDCARD,
                   MediaType.APPLICATION_JSON,
                   CustomMediaType.APPLICATION_CUSTOM_MEDIATYPE_JSON_V2})