0

我正在尝试更改 SpringBoot 的默认序列化,以便它可以处理 LocalDateTime 对象。这适用于我注释过的 POJO

 @JsonFormat(shape = JsonFormat.Shape.STRING)
 @JsonSerialize(using = LocalDateTimeSerializer.class)
 private LocalDateTime date;

但是我有一个使用 WebFlux 的应用程序,其中 Map 作为参数传递,并且没有正确序列化。代码看起来像这样,其中contract是 Map<String, Object>,并且 Map 中的一个条目的类型为 LocalDateTime

webClient.post()
.uri(url.toString())
.header("Authorization", authToken)
.body(Mono.just(contract), contract.getClass())
.retrieve()
.bodyToMono(Response.class)

我能够创建一个 ObjectMapper

public static final ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

然后使用mapper.writeValueAsString(contract),正常工作,将日期输出为“2021-06-29T12:46:36”。我的 POM 中已经有 jackson-datatype-jsr310。

但我无法让它与 WebFlux 一起使用

尝试定义一个bean

 @Bean
 @Primary
 public ObjectMapper objectMapper() {
   final JavaTimeModule module = new JavaTimeModule();
   final ObjectMapper mapper = new ObjectMapper();
   mapper.registerModule(module);
   mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
   return mapper;
 }

如果我将 Spring 的 ObjectMapper 与 bean 一起注入到我的代码中,那么如果我这样做了,它就可以工作mapper.writeValueAsString(contract)。所以这至少证明了Spring的ObjectMapper发生了变化。但是当我通过 WebClient 发送地图时,服务器会以这种格式获取日期:date=[2021, 6, 23, 20, 48, 50]

4

0 回答 0