Java 使用自定义对象映射器在Vertx 4.0中注册Jackson编解码器的位置在哪里
我试图转换为纯,遇到了一个问题 在Quarkus中,定制Jackson ObjectMapper以序列化或反序列化HTTP消息很容易Java 使用自定义对象映射器在Vertx 4.0中注册Jackson编解码器的位置在哪里,java,vert.x,vertx-verticle,Java,Vert.x,Vertx Verticle,我试图转换为纯,遇到了一个问题 在Quarkus中,定制Jackson ObjectMapper以序列化或反序列化HTTP消息很容易 @适用范围 公共类CustomObjectMapper实现ObjectMapperCustomizer{ @凌驾 公共void自定义(ObjectMapper ObjectMapper){ objectMapper.disable(SerializationFeature.WRITE_DATES_作为时间戳); objectMapper.disable(Seri
@适用范围
公共类CustomObjectMapper实现ObjectMapperCustomizer{
@凌驾
公共void自定义(ObjectMapper ObjectMapper){
objectMapper.disable(SerializationFeature.WRITE_DATES_作为时间戳);
objectMapper.disable(SerializationFeature.WRITE_DATE_TIMESTAMPS_为_纳秒);
禁用(反序列化功能。读取\u日期\u时间戳\u为\u纳秒);
JavaTimeModule=newJavaTimeModule();
LocalDateTimeDeserializer LocalDateTimeDeserializer=新的LocalDateTimeDeserializer(DateTimeFormatter.ISO\u LOCAL\u DATE\u TIME);
addDeserializer(LocalDateTime.class,localDateTimeDeserializer);
objectMapper.registerModule(模块);
}
}
在Vertx中,如何优雅地定制ObjectMapper
?我的目的是注册一个自定义的ObjectMapper
而不是内置的,因此当使用Json.encode
时,它将使用我的自定义ObjectMapper
在中,
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();
现在,您可以使用JacksonFactory配置两个映射器Vertx配置一个
DatabindCodec
(当然,我包括了databind和jsr310模块),JacksonFactory在那里定义了一个ObjectMapper
。我不知道如何配置它。对于我的应用程序,当我在处理程序中调用Json
方法时,Java 8 Datetime不是序列化为字符串而是一个int数组(这是Java中的一个普遍问题,可以通过调整ObjectMapper的参数来解决)。对于我(VertX 4.0.3)mapper()
和prettyMapper()
是DatabindCodec
上的静态方法。因此,访问Json
类并转换编解码器似乎是不必要的。您可以直接访问映射器,例如DatabindCodec.mapper()
。