使用自定义对象映射器在 Vertx 4.0 中注册 Jackson 编解码器的地方在哪里
Where is the place to register a Jackson Codec in Vertx 4.0 using custom Object Mapper
我正在尝试转换 my Quarkus vertex sample to pure Vertx 4.0 但遇到了问题。
在 Quarkus 中,很容易自定义 Jackson ObjectMapper 来序列化或反序列化 HTTP 消息。
@ApplicationScoped
public class CustomObjectMapper implements ObjectMapperCustomizer {
@Override
public void customize(ObjectMapper objectMapper) {
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.disable(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS);
objectMapper.disable(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS);
JavaTimeModule module = new JavaTimeModule();
LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer);
objectMapper.registerModule(module);
}
}
而在 Vertx 中,如何优雅地自定义 ObjectMapper
?我的意图是注册一个自定义 ObjectMapper
而不是内置的,因此当使用 Json.encode
时,它将使用我的自定义 objectMapper
代替。
在my Vertx sample中,Json.encode
将使用内置的objectMapper
将Java 8 DateTime序列化为int数组而不是ISO日期字符串。
首先,您需要将jackson-databind
添加到您的依赖项中,因为Vert.x 4 不会传递。
然后在你的主要方法中:
io.vertx.core.json.jackson.DatabindCodec codec = (io.vertx.core.json.jackson.DatabindCodec) io.vertx.core.json.Json.CODEC;
// returns the ObjectMapper used by Vert.x
ObjectMapper mapper = codec.mapper();
// returns the ObjectMapper used by Vert.x when pretty printing JSON
ObjectMapper prettyMapper = codec.prettyMapper();
现在您可以配置两个映射器
我正在尝试转换 my Quarkus vertex sample to pure Vertx 4.0 但遇到了问题。
在 Quarkus 中,很容易自定义 Jackson ObjectMapper 来序列化或反序列化 HTTP 消息。
@ApplicationScoped
public class CustomObjectMapper implements ObjectMapperCustomizer {
@Override
public void customize(ObjectMapper objectMapper) {
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.disable(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS);
objectMapper.disable(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS);
JavaTimeModule module = new JavaTimeModule();
LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer);
objectMapper.registerModule(module);
}
}
而在 Vertx 中,如何优雅地自定义 ObjectMapper
?我的意图是注册一个自定义 ObjectMapper
而不是内置的,因此当使用 Json.encode
时,它将使用我的自定义 objectMapper
代替。
在my Vertx sample中,Json.encode
将使用内置的objectMapper
将Java 8 DateTime序列化为int数组而不是ISO日期字符串。
首先,您需要将jackson-databind
添加到您的依赖项中,因为Vert.x 4 不会传递。
然后在你的主要方法中:
io.vertx.core.json.jackson.DatabindCodec codec = (io.vertx.core.json.jackson.DatabindCodec) io.vertx.core.json.Json.CODEC;
// returns the ObjectMapper used by Vert.x
ObjectMapper mapper = codec.mapper();
// returns the ObjectMapper used by Vert.x when pretty printing JSON
ObjectMapper prettyMapper = codec.prettyMapper();
现在您可以配置两个映射器