我已经使用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})
答案 0 :(得分:1)
以下解决方案仅适用于同时维护2个版本:
删除旧版本的@Produces(v1)。
这会强制在v1上使用WildCard,因此(<)> 不那么具体比v2中的@Produce
。使用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})