我正在将我的Sping Boot 项目更新到3.0.0版本,其中一个重要的依赖项是Spring Data Elastic Repository,我包含了启动器依赖项:
implementation("org.springframework.boot:spring-boot-starter-data-elasticsearch")
更新依赖项后,我的单元测试失败了,因为web控制器不再提供空值。我尝试使用属性包含配置来更改行为:
spring:
jackson:
default-property-inclusion: always
这没有帮助。我调试了代码组,似乎新的Elastic Java Client有自己的JacksonMapper配置,它将全局配置设置为'NON_NULL'。
package co.elastic.clients.json.jackson;
...
public class JacksonJsonpMapper extends JsonpMapperBase {
private final JacksonJsonProvider provider;
private final ObjectMapper objectMapper;
...
public JacksonJsonpMapper(ObjectMapper objectMapper) {
this(
objectMapper
.configure(SerializationFeature.INDENT_OUTPUT, false)
.setSerializationInclusion(JsonInclude.Include.NON_NULL),
// Creating the json factory from the mapper ensures it will be returned by JsonParser.getCodec()
new JacksonJsonProvider(objectMapper.getFactory())
);
}
...
有人知道如何解决这个问题吗?
1条答案
按热度按时间mbskvtky1#
我找到了这个问题的解决方案。Sping Boot 有一个用于弹性JacksonMap器的自动配置。这个自动配置使用与Web控制器相同的ObjectMapper:
´´´
...
´´´
可以覆盖此Bean以复制ObjectMapper示例并为弹性客户端创建自己的ObjectMapper:
´´´
´´´