我正在尝试更改 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]