【发布时间】:2021-12-02 17:15:39
【问题描述】:
首先我想给你一些背景信息。
我们有一个 接口 A,它由 B 类实现。 B 类 也扩展 抽象 C类。
我们通常在调用请求时返回(其余的 GET 端点)是 B 中的值以及构成层次结构的所有类中的值(D 扩展 B 等等)。
B 包含获取这些值的方法。 这些 getter 未在 A 接口中定义。 但是响应有效,这些值被转换为 JSON,所以到目前为止没有问题。 Jackson 能够调用 getter 并基于它们创建 JSON
现在我们正在将 Jackson 从 2.6.7 升级到更新的版本。我们尝试了 2.10.3 及更高版本。
问题是这些 getter 不再被序列化。如果我们在界面中定义它们是可以的,但在我们的上下文中这样做的风险很高。
有谁知道为什么在较新版本的 Jackson 中,接口中未定义的 getter 会被忽略? 是否有配置、调整或其他可以强制其先前行为的东西?
稍后编辑 1
需要注意对象是如何创建的: Interface A obj = new Class C() 或层次结构中需要的任何一个;
后期编辑 2
也许它还有助于提供 Spring 从版本 4.0.0 更新到 5.3.0 的信息。该应用程序使用 Spring-mvc,Spring-core,它是一个非spring-boot的应用程序。
使用的依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${com.fasterxml.jackson.databind}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${com.fasterxml.jackson.databind}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${com.fasterxml.jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${com.fasterxml.jackson.version}</version>
</dependency>
【问题讨论】:
-
您的类型是否有任何自定义序列化配置?在多态模型中,肯定有一个,否则自定义类型映射是不可能的。一个由一种(或多种)类型实现的接口的简单示例会很好地工作。
标签: java spring spring-mvc jackson jackson-databind