我正在使用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与自定义反序列化一起使用?
这是一个自定义ObjectMapperJSON(反序列化)的示例。注意,出于流目的,使用了不同的编码器/解码器,但是其配置原理相同。
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();