在我的 Spring Boot 服务中,我使用
RestClient
执行 REST 调用。我想忽略请求主体中的空值,所以我设置了
spring:
jackson:
default-property-inclusion: "non_null"
在我的
application.yml
。但是,由于某种原因,该配置在 RestClient
的 ObjectMapper
中不受尊重。另一方面,当我将 Spring 自动配置的 ObjectMapper
注入到我的测试类中(用 @SpringBootTest
注释)时,我看到映射器按预期配置。 RestClient
选择与 Spring Boot 配置的不同的 ObjectMapper
的原因可能是什么?
一些注意事项:
ObjectMapper
之外,我不会以任何其他方式配置
application.yml
RestClient.create()
设置 RestClient
@EnableWebMvc
(类似SO问题中通常的嫌疑人)您至少需要使用
RestClient.create(restTemplate)
。您的 RestTemplate
需要配置您需要的 ObjectMapper
。
当你使用
RestClient.create()
时,它无法拾取弹簧配置的映射器,怎么可能呢?这是常规的 java 对象创建。
还有一些其他选项,例如:
RestClient.builder()
.messageConverters(in -> {
MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
messageConverter.setPrettyPrint(false);
messageConverter.setObjectMapper(objectMapper);
in.add(jacksonConverter);
})
.build();