gpt4 book ai didi

具有两种 MVC 配置的 Spring Boot

转载 作者:IT老高 更新时间:2023-10-28 13:47:16 25 4
gpt4 key购买 nike

我有一个带有 REST API 的 Spring Boot 应用程序,使用 Jackson 进行 JSON View 配置。它工作得很好,我可以获得 Spring Boot 的所有优点。

但是,我需要添加一个类似但具有不同设置的附加 REST API。例如,除其他外,它需要不同的 Jackson 对象映射器配置,因为 JSON 看起来会有很大不同(例如,没有 JSON 数组)。这只是一个例子,但有很多不同之处。每个 API 都有不同的上下文(例如/api/current 和/api/legacy)。

理想情况下,我希望将两个 MVC 配置映射到这些不同的上下文,而不必放弃启动时的任何自动连接。

到目前为止,我所能接近的只是使用两个调度程序 servlet,每个 servlet 都有自己的 MVC 配置,但这会导致 Boot 丢弃我自动获得的一大堆东西,并且基本上破坏了使用 boot 的原因。

我无法将应用拆分为多个应用。

“你不能用 Boot 做到这一点并且仍然获得它的所有魔力”的答案是一个可以接受的答案。看来它应该能够处理这个问题。

最佳答案

有几种方法可以实现这一目标。根据您的要求,我说这是管理 REST API 版本的案例。有几种方法可以对 REST API 进行版本控制,其中一些流行的是版本 url 和评论链接中提到的其他技术。基于 URL 的方法更倾向于拥有多个版本的地址:

例如对于 V1:

/path/v1/resource

和 V2:

/path/v2/resource

这些将解析为 Spring MVC Controller bean 中的 2 个不同方法,调用被委托(delegate)给这些方法。

解决API版本的另一个选项是使用 header ,这种方式只有URL,基于版本的多种方法。例如:

/path/resource

标题:

X-API-Version: 1.0

标题:

X-API-Version: 2.0

这也将在 Controller 上的两个单独操作中解决。

现在这些是可以处理多个 rest 版本的策略。

下面对上述方法进行了很好的解释: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 配置。

关于具有两种 MVC 配置的 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34728814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com