使用自定义对象映射器在 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();

现在您可以配置两个映射器