有几种方法可以实现此目标。根据您的要求,我认为这是管理REST API版本的情况。
有多种方式来为REST API添加版本号,其中一些流行的方法包括基于URL的版本控制和其他在评论中提到的技术。
基于URL的方法更多地关注于具有多个地址版本:
例如:
对于V1:
/path/v1/resource
和 V2 :
/path/v2/resource
这将在Spring MVC Controller bean中解析为2种不同的方法,调用将被委托给这些方法。
解决API版本的另一种选项是使用headers,这样只有URL,多个方法基于版本。
例如:
/path/resource
标题:
X-API-Version: 1.0
标题:
X-API-Version: 2.0
这也将在控制器上进行两个单独的操作。
现在这些是基于哪些可以处理多个rest版本的策略。
以上方法在以下链接中有很好的解释:git example
注:以上是一个spring boot应用程序。
这两种方法的共性在于根据不同的POJOS,Jackson JSON库将自动将指定类型的实例编组为JSON。
即假设代码使用 @RestController [org.springframework.web.bind.annotation.RestController]
。
现在,如果您的要求是拥有不同的JSON Mapper,即不同的JSON mapper配置,则无论Spring上下文如何,您都需要一种不同的序列化/反序列化策略。
在这种情况下,您需要实现一个自定义反序列化器{CustomDeSerializer},它将扩展JsonDeserializer<T>
[com.fasterxml.jackson.databind.JsonDeserializer]
,并在deserialize()
中实现您的自定义策略。
在目标POJO上使用@JsonDeserialize(using = CustomDeSerializer.class)
注释。
这样就可以使用不同的反序列化器来管理多个JSON方案。
通过结合Rest版本控制和自定义序列化策略,可以在不必连接多个分发器Servlet配置的情况下管理每个API的上下文。