当前位置: 首页 > 知识库问答 >
问题:

Spring Boot自动配置的Jackson ObjectMapper默认不用于WebFlux WebClient

双浩涆
2023-03-14

在我的Spring Boot应用程序中,我使用反应性WebFlux WebClient从SSE(服务器发送事件)终结点检索流式JSON数据。修改默认的自动配置Jackson ObjectMapper行为,通过设置Spring Boot中的配置选项,如spring.jackson.deserialization.read-date-timestamps-as-nanos秒=false,如官方文档所建议的,对WebFlux WebClient没有影响。我还尝试了这个SO线程中概述的其他建议,比如为WebFlux配置创建自定义bean,但它们没有帮助,配置仍然没有被选中。

共有1个答案

邹斌
2023-03-14

在花了相当长的时间调试SpringWebFlux/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注释。

如果能在正式文件中以某种方式使这一点更加明确,肯定会有所帮助。希望这个答案对面临类似问题的人有用!

 类似资料:
  • 4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类

  • 与Jquery Mobile自动初始化共同协作 Working with Jquery Mobile's Auto-initialization 不像其他的Jq项目,比如jq和jq ui,Jquery Mobile会在加载到增强特性时马上应用它(远早于document.ready事件发生时)。这些特性会基于Jquery Mobile的默认配置应用,是针对默认的情形设计的,他可能符合你的需求,也可能

  • 我有一个简单的SpringBoot应用程序,我想使用AutoConfiguration来配置Tomcat jdbc池数据源。 我正在使用这些Spring依赖项: 以下是我的 application.yml 文件中的数据源属性: 我确定正在加载属性,因为应用程序正在获取其他值。 我在配置文件中将 bean 定义为: 我将数据源注入到我的DAO中,如下所示: 如果我在getDataSource()方法

  • 本机Spring Boot自动配置(例如one)也可以检测主类中声明的bean(例如注释的方法)。 如何对主类中声明的bean进行正确的bean检测? 编辑

  • 我正在使用带有Spring Boot(2.3.3版)的H2数据库和H2数据库的所有默认设置。 这是我申请的所有文件。 pom.xml

  • 上一小节讲到,DispatcherServlet维护了一个列表,其中保存了其所依赖的所有bean的默认实现。这个列表保存在包org.springframework.web.servlet下的DispatcherServlet.properties文件中。 这些特殊的bean都有一些基本的默认行为。或早或晚,你可能需要对它们提供的一些默认配置进行定制。比如说,通常你需要配置InternalResou