我已经通过定义供应商 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/