我正在使用Jackson 2.8并且需要与ISO 8601时间戳内不允许毫秒的API进行通信.
预期的格式是这样的: "2016-12-24T00:00:00Z"
我正在使用Jackson的JavaTimeModule WRITE_DATES_AS_TIMESTAMPS设置为false.
但这将打印毫秒.
所以我尝试使用objectMapper.setDateFormat哪个没有改变任何东西.
我目前的解决方法是:
ObjectMapper om = new ObjectMapper();
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.appendInstant(0)
.toFormatter();
JavaTimeModule jtm = new JavaTimeModule();
jtm.addSerializer(Instant.class, new JsonSerializer<Instant>() {
@Override
public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
gen.writeString(dtf.format(value));
}
});
om.registerModule(jtm);
Run Code Online (Sandbox Code Playgroud)
我正在覆盖默认的序列化工具Instant.class.
有没有什么好办法使用一些配置参数来解决这个问题?
在我使用的项目中,我有一些与使用Jackson的JSON序列化相关的问题Spring Boot 2.0.0.M6,Spring Framework 5.0.1.RELEASE以及Jackson 2.9.2.
我在以下位置配置了以下与Jackson相关的设置application.properties:
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
Run Code Online (Sandbox Code Playgroud)
序列化主要按照我的需要工作.尽管如此,我注意到杰克逊似乎已经截止了毫秒数000.
测试1:序列化Instant,毫秒设置为000:
Instant.parse("2017-09-14T04:28:48.000Z")"2017-09-14T04:28:48Z"测试2:使用设置为某些非000值的毫秒序列化Instant :
Instant.parse("2017-09-14T04:28:48.100Z")"2017-09-14T04:28:48.100Z"问题:
000?