Java Spring Boot自动配置的Jackson ObjectMapper默认情况下不用于WebFlux WebClient
在我的Spring Boot应用程序中,我使用反应式WebFlux WebClient从SSE(服务器发送事件)端点检索流式JSON数据。通过在Spring Boot中设置配置选项(如Java Spring Boot自动配置的Jackson ObjectMapper默认情况下不用于WebFlux WebClient,java,spring,spring-boot,jackson,spring-webflux,Java,Spring,Spring Boot,Jackson,Spring Webflux,在我的Spring Boot应用程序中,我使用反应式WebFlux WebClient从SSE(服务器发送事件)端点检索流式JSON数据。通过在Spring Boot中设置配置选项(如Spring.Jackson.deserialization.read date timestamps as nanoseconds=false)来修改默认的自动配置Jackson ObjectMapper行为(如建议的那样),对WebFlux WebClient没有影响。我还尝试了本文中概述的其他建议,如为Web
Spring.Jackson.deserialization.read date timestamps as nanoseconds=false)来修改默认的自动配置Jackson ObjectMapper行为(如建议的那样),对WebFlux WebClient没有影响。我还尝试了本文中概述的其他建议,如为WebFlux配置创建自定义bean,但没有帮助,配置仍然没有被获取。在花了相当长的时间调试Spring WebFlux/Jackson库代码后,我终于找到了解决问题的提示,查看反应式WebFlux WebClient。要使WebClient使用默认的自动配置Jackson ObjectMapper,需要一些自定义管道。解决方案是在创建WebClient的新实例时,配置用于处理服务器发送事件的默认解码器。以下是示例代码:
@Component
public class MarketDataFetcher implements CommandLineRunner {
// ...
private final WebClient webClient;
public MarketDataFetcher(ObjectMapper objectMapper) {
webClient = createWebClient(objectMapper);
}
private WebClient createWebClient(ObjectMapper objectMapper) {
return WebClient.builder()
.codecs(configurer -> configurer.defaultCodecs()
.serverSentEventDecoder(new Jackson2JsonDecoder(objectMapper)))
.baseUrl(BASE_URL)
.build();
}
}
ObjectMapper
由Spring自动注入,因此不需要@Autowired
注释
如果能在正式文件中以某种方式使这一点更加明确,肯定会有所帮助。希望这个答案对面临类似问题的人有用 在这件事上也提出了类似的问题->