Han*_*tsy 7 java vert.x vertx-verticle
我正在尝试将Quarkus 顶点示例转换为纯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);
}
}
Run Code Online (Sandbox Code Playgroud)
而在Vertx中,如何ObjectMapper优雅地定制呢?我的目的是注册一个自定义ObjectMapper而不是内置自定义,因此在使用 时Json.encode,它将使用我的自定义objectMapper。
在我的 Vertx 示例中,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();
Run Code Online (Sandbox Code Playgroud)
现在您可以配置两个映射器