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