Sin*_*hot 25 spring spring-mvc spring-boot
我有一个带有REST API的Spring Boot应用程序,使用Jackson进行JSON视图配置.它工作得很好,我可以获得Spring Boot的所有优点.
但是,我需要添加一个类似但具有不同设置的其他REST API.例如,除了其他方面,它需要一个不同的Jackson对象映射器配置,因为JSON看起来会有点不同(例如没有JSON数组).这只是一个例子,但有很多不同之处.每个API都有不同的上下文(例如/ api/current和/ api/legacy).
理想情况下,我想要将两个MVC配置映射到这些不同的上下文,而不必放弃启动时任何自动连接的东西.
到目前为止,所有我能够接近的是使用两个调度程序servlet,每个servlet都有自己的MVC配置,但这导致Boot丢弃了我自动得到的一大堆东西,基本上无法使用启动的原因.
我无法将应用程序分解为多个应用程序.
答案"你不能用Boot做到这一点并且仍能获得所有的魔力"是一个可以接受的答案.看起来它应该能够处理这个问题.
有几种方法可以实现这一目标。根据您的要求,我想说这是管理 REST API 版本的情况。有多种方法可以对 REST API 进行版本控制,其中一些流行的方法是版本 url 以及评论链接中提到的其他技术。基于 URL 的方法更倾向于拥有多个版本的地址:
例如 对于 V1 :
/path/v1/resource
Run Code Online (Sandbox Code Playgroud)
和V2 :
/path/v2/resource
Run Code Online (Sandbox Code Playgroud)
这些将解析为 Spring MVC 控制器 bean 中的 2 个不同方法,调用将被委托给这些方法。
解析 API 版本的另一个选项是使用标头,这样只有 URL,根据版本有多种方法。例如:
/path/resource
Run Code Online (Sandbox Code Playgroud)
标题:
X-API-Version: 1.0
Run Code Online (Sandbox Code Playgroud)
标题:
X-API-Version: 2.0
Run Code Online (Sandbox Code Playgroud)
这也将通过控制器上的两个单独的操作来解决。
现在这些是可以处理多个剩余版本的策略。
上述方法在下面有很好的解释: git example
注:以上是Spring Boot应用程序。
这两种方法的共同点是,需要不同的 POJOS,基于哪个 Jackson JSON 库来自动将指定类型的实例编组为 JSON。
即假设代码使用@RestController [org.springframework.web.bind.annotation.RestController]
现在,如果您的要求是具有不同的 JSON 映射器,即不同的 JSON 映射器配置,那么无论 Spring 上下文如何,您都需要不同的序列化/反序列化策略。
在这种情况下,您将需要实现一个自定义反序列化器 {CustomDeSerializer},它将扩展JsonDeserializer<T> [com.fasterxml.jackson.databind.JsonDeserializer]并实现deserialize()您的自定义启动。
@JsonDeserialize(using = CustomDeSerializer.class)在目标 POJO 上使用注释。
这样,可以使用不同的反序列化器来管理多个 JSON 方案。
通过结合 Rest 版本控制 + 自定义序列化策略,每个 API 都可以在其自己的上下文中进行管理,而无需连接多个调度程序 Servlet 配置。
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |