小编典典

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

spring

我正在使用spring-webflux WebClient (内部版本20170502.221452-172)访问Web应用程序,该Web应用程序生成Entry对象流(application / stream + json),如下所示:

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都可以正常工作,但我想知道要向Java反序列化添加任何自定义JSON时需要做什么(例如自定义的Jackson ObjectMapper)。

我无法在WebClient或其构建器和流利的API生成的对象的类中找到任何API 来做到这一点。

是否有人将WebClient与自定义反序列化一起使用?


阅读 994

收藏
2020-04-21

共1个答案

小编典典

这是一个自定义ObjectMapperJSON(反序列化)的示例。注意,出于流目的,使用了不同的编码器/解码器,但是其配置原理相同。

    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();
2020-04-21