Set Jackson Timezone for Date deserialization

后端 未结 9 634
终归单人心
终归单人心 2020-12-13 04:23

I\'m using Jackson (via Spring MVC Annotations) to deserialize a field into a java.util.Date from JSON. The POST looks like - {\"enrollDate\":\"2011-09-28

9条回答
  •  北荒
    北荒 (楼主)
    2020-12-13 05:01

    Looks like older answers were fine for older Jackson versions, but since objectMapper has method setTimeZone(tz), setting time zone on a dateFormat is totally ignored.

    How to properly setup timeZone to the ObjectMapper in Jackson version 2.11.0:

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setTimeZone(TimeZone.getTimeZone("Europe/Warsaw"));
    

    Full example

      @Test
      void test() throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.findAndRegisterModules();
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        JavaTimeModule module = new JavaTimeModule();
        objectMapper.registerModule(module);
        objectMapper.setTimeZone(TimeZone.getTimeZone("Europe/Warsaw"));
    
        ZonedDateTime now = ZonedDateTime.now();
        String converted = objectMapper.writeValueAsString(now);
    
        ZonedDateTime restored = objectMapper.readValue(converted, ZonedDateTime.class);
        System.out.println("serialized: " + now);
        System.out.println("converted: " + converted);
        System.out.println("restored: " + restored);
    
        Assertions.assertThat(now).isEqualTo(restored);
      }
    `
    

提交回复
热议问题