Rest 使用Jersey在版本化API中匹配资源

Rest 使用Jersey在版本化API中匹配资源,rest,jersey,Rest,Jersey,我有一个Jersey REST服务,我正在寻找版本控制以支持向后兼容性 我选择了“内容协商”选项,因为更改URL对我来说是一个困难的选项。服务版本添加在标题中,并在服务器端标识。一些服务有请求负载,而其他服务没有 我不确定如何为具有请求负载的服务实现版本控制。Jersey自动映射请求负载对象并解析它。如果我需要两个不同的版本(版本在标题中标识),我们如何处理这两个请求有效负载并将它们路由到正确的服务版本?您的方法签名将告诉Jersey您如何使用它来封送请求输入 与接受标题内容协商和内容类型标题内

我有一个Jersey REST服务,我正在寻找版本控制以支持向后兼容性

我选择了“内容协商”选项,因为更改URL对我来说是一个困难的选项。服务版本添加在标题中,并在服务器端标识。一些服务有请求负载,而其他服务没有


我不确定如何为具有请求负载的服务实现版本控制。Jersey自动映射请求负载对象并解析它。如果我需要两个不同的版本(版本在标题中标识),我们如何处理这两个请求有效负载并将它们路由到正确的服务版本?

您的方法签名将告诉Jersey您如何使用它来封送请求输入

与接受标题内容协商和内容类型标题内容协商一起,比较:

@POST    
@Produces("application/vnd.dis-feed-v2+json")
@Consumes("text/csv")
@Path("/wiGGits")
public String postEnrollmentsV2(String payload) 
vs

如果有效负载无法编组为xml,Jersey将在此/wiGGits服务的v1中生成400错误


如果内容类型相同,并且要拒绝与预期版本不匹配的对象版本,还可以检查对象内容的版本差异

方法的签名将告诉Jersey如何使用它来封送请求输入

与接受标题内容协商和内容类型标题内容协商一起,比较:

@POST    
@Produces("application/vnd.dis-feed-v2+json")
@Consumes("text/csv")
@Path("/wiGGits")
public String postEnrollmentsV2(String payload) 
vs

如果有效负载无法编组为xml,Jersey将在此/wiGGits服务的v1中生成400错误


如果内容类型相同,并且要拒绝与预期版本不匹配的对象版本,还可以检查对象内容的版本差异,只需添加我的两美分即可。Jersey实现的功能非常清楚请求匹配的工作原理:

3.7.2请求匹配 通过将标准化请求URI、任何请求实体的媒体类型、请求的响应实体格式与资源类及其方法上的元数据注释进行比较,将请求与相应的资源方法或子资源方法相匹配。如果找不到匹配的资源方法或子资源方法,则返回相应的错误响应。[……]

除了在找不到匹配资源(类和方法)时生成的(404状态),适当的错误响应包括(再次引用):

  • 如果没有方法支持请求方法,则实现必须生成(405状态)且没有实体

  • 如果没有方法支持请求实体主体的媒体类型,则实现必须生成(415状态)且没有实体

  • 如果没有方法支持一种可接受的响应实体介质类型,则实现必须生成(406状态)且无实体

总之,当请求与您的资源不匹配时,您将收到相应的错误消息


如果需要,可以创建,在开始请求匹配之前执行。此筛选器允许您修改请求。您可以轻松地更改请求的方法、请求的URI和请求的头

要做到这一点,只需使用以下内容实现和注释:

@Provider
@预匹配
公共类PreMatchingFilter实现ContainerRequestFilter{
@凌驾
公共无效筛选器(ContainerRequestContext requestContext)引发IOException{
//使用requestContext修改请求
}
}

有关更多详细信息,请查看API。

只需添加我的两分钱。Jersey实现的功能非常清楚请求匹配的工作原理:

3.7.2请求匹配 通过将标准化请求URI、任何请求实体的媒体类型、请求的响应实体格式与资源类及其方法上的元数据注释进行比较,将请求与相应的资源方法或子资源方法相匹配。如果找不到匹配的资源方法或子资源方法,则返回相应的错误响应。[……]

除了在找不到匹配资源(类和方法)时生成的(404状态),适当的错误响应包括(再次引用):

  • 如果没有方法支持请求方法,则实现必须生成(405状态)且没有实体

  • 如果没有方法支持请求实体主体的媒体类型,则实现必须生成(415状态)且没有实体

  • 如果没有方法支持一种可接受的响应实体介质类型,则实现必须生成(406状态)且无实体

总之,当请求与您的资源不匹配时,您将收到相应的错误消息


如果需要,可以创建,在开始请求匹配之前执行。此筛选器允许您修改请求。您可以轻松地更改请求的方法、请求的URI和请求的头

要做到这一点,只需使用以下内容实现和注释:

@Provider
@预匹配
公共类PreMatchingFilter实现ContainerRequestFilter{
@凌驾
公共无效筛选器(ContainerRequestContext requestContext)引发IOException{
//使用requestContext修改请求
}
}

有关更多详细信息,请查看API。

可能重复的否,此问题不是重复的。其他问题和答案不涉及请求有效负载的处理。事实上,Stackoverflow中没有类似的问题。可能与否重复,此问题不是重复问题。其他问题和答案不涉及请求有效负载的处理。事实上没有