java - 如何自定义 SpringWebFlux WebClient JSON 反序列化?

标签 java json spring reactive-programming spring-webflux

我正在使用 spring-webflux WebClient (build 20170502.221452-172) 来访问一个生成 Entry 对象流 (application/stream+json) 的 Web 应用程序,如下所示:

final WebClient producerClient = WebClient.create("http://localhost:8080/");

Flux<Entry> entries = producerClient.get().uri("json-stream")
        .accept(MediaType.APPLICATION_STREAM_JSON)
        .exchange()
        .flatMapMany(clientResponse -> clientResponse.bodyToFlux(Entry.class));

虽然 Entry 对象的反序列化对于使用标准常见类型(包括 Java 时间 (JSR-310) 数据类型(如 java.time.Instant)的 POJO 来说很好),但我想知道我必须做什么为了将任何自定义 JSON 添加到 Java 反序列化(例如,自定义 Jackson ObjectMapper)。

我在 WebClient 中找不到任何 API或在其构建器和流式 API 生成的对象的类中执行此操作。

有人用过自定义反序列化的 WebClient 吗?

(也许 API 还没有?)

最佳答案

这是一个为 JSON(反)序列化定制 ObjectMapper 的示例。 请注意,出于流媒体目的,使用了不同的编码器/解码器,但其配置原理保持不变。

    ExchangeStrategies strategies = ExchangeStrategies
            .builder()
            .codecs(clientDefaultCodecsConfigurer -> {
                clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(new ObjectMapper(), MediaType.APPLICATION_JSON));
                clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(new ObjectMapper(), MediaType.APPLICATION_JSON));

            }).build();

    WebClient webClient = WebClient.builder().exchangeStrategies(strategies).build();

关于java - 如何自定义 SpringWebFlux WebClient JSON 反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769301/

相关文章:

java - 通过CompletableFuture并行执行一些线程,并串行执行一些线程

java - 设置 JTextArea 的固定宽度,高度应根据其内容自动调整

php - 使用 JSON 和 PHP 更新数据库 (Android)

java - 无法在intellij idea中进行cucumber调试

java - JSP上传文件

python - 使用 python 将 json 中的对象替换为另一个 json 文件

json - 使用 jq 或替代命令行工具比较 JSON 文件

java - 无法在 docker 内构建 gradle 应用程序

java - 如何只插入连接表而不插入 JPA Hibernate 中的引用表

spring - 将 Spring 的 LocalValidatorFactoryBean 与 JSF 一起使用