2016-08-23 2 views
0

Я использую Jackson 2.8.1 для сериализации java-объекта. Тем не менее, я не могу избавиться от мерзавца идентификатора зоны при преобразовании объекта ZonedDateTime в строку с «WRITE_DATES_WITH_ZONE_ID» установлен в ложномWRITE_DATES_WITH_ZONE_ID не может быть отключен для ZonedDateTime

ObjectMapper mapper = new ObjectMapper() 
      .findAndRegisterModules() 
      .setSerializationInclusion(Include.NON_EMPTY) 
      .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) 
      .configure(SerializationFeature.WRITE_DATES_WITH_ZONE_ID, false); 

ZonedDateTime zdt = ZonedDateTime.now(); 
System.out.println(mapper.writeValueAsString(zdt)); // "2016-08-23T13:35:38.127+08:00[Asia/Shanghai]" 

Может ли один помочь?

+0

что-то не хватает в вашем примере в то время как он печатает все поля объектов 'ZonedDateTime'' {"dayOfMonth": 23, "dayOfWeek": "ВТОРНИК", "dayOfYear": 236, "month": "AUGUST", "monthValue": 8, "year": 2016, "час": 14, "минута": 40, "нано": 745000000, "второй": 3, "хронология": { "идентификатор": "ISO", "calendarType": "ISO8601"}} '. –

+0

@MichalFoksa, возможно, вам понадобится jackson-datatype-jsr310 в вашем пути к вашему пути –

+0

Какое ваше ожидаемое значение? '2016-08-23T13: 35: 38.127' или' 2016-08-23T13: 35: 38.127 + 08: 00'? –

ответ

1

Я бы сказал, что проблема связана с тем, что вы называете «findAndRegisterModules».

Вы, наверное, добавили следующую зависимость:

<dependency> 
    <groupId>com.fasterxml.jackson.datatype</groupId> 
    <artifactId>jackson-datatype-jsr310</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 

Поступая таким образом, вы ввели два новых модуля: "JSR310Module" (устаревшее) и "JavaTimeModule".

«findAndRegisterModules» может зарегистрировать «JSR310Module», который не поддерживает функцию WRITE_DATES_WITH_ZONE_ID.

Вы можете зарегистрировать правильный модуль, удалив «findAndRegisterModules» и добавив:

JavaTimeModule module = new JavaTimeModule(); 
registerModule(module); 

Тогда не забудьте отключить WRITE_DATES_WITH_ZONE_ID в вашем картографа:

disable(SerializationFeature.WRITE_DATES_WITH_ZONE_ID); 
+0

Вы просто спасли меня много времени :-) –

+0

Добро пожаловать :) –

Смежные вопросы