我正在使用 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/