Spring 4MVC 返回Java 8 时间JSON格式的数据

有时在Spring MVC中返回JSON格式的response的时候会使用 @ResponsrBody 或者 RestController 注解,不过在处理时间的时候会很麻烦,一般我们使用的HTTPMessageConverter是 MappingJackson2HttpMessageConverter ,它默认返回的时间格式是这种:

"startDate" : {
    "year" : 2010,
    "month" : "JANUARY",
    "dayOfMonth" : 1,
    "dayOfWeek" : "FRIDAY",
    "dayOfYear" : 1,
    "monthValue" : 1,
    "hour" : 2,
    "minute" : 2,
    "second" : 0,
    "nano" : 0,
    "chronology" : {
      "id" : "ISO",
      "calendarType" : "iso8601"
    }
  }

但是我们一般情况下会想要返回的格式是 2016-11-26 21:04:34 这样的数据,这就需要再引入一个包:

<dependency>
     <groupId>com.fasterxml.jackson.datatype</groupId>
     <artifactId>jackson-datatype-jsr310</artifactId>
     <version>2.8.5</version>
</dependency>

然后在你想要JSON化的POJO字段的get函数上加上一个 @JsonSerializer 注解:

@JsonSerialize(using = LocalDateTimeSerializer.class)
    public LocalDateTime getLoginTime() {
        return this.loginTime;
    }

不过这样会产生这样的输出:

"startDate":[
    2016,
    11,
    26,
    13,
    12,
    12
    ]

这样也不是我们想要的结果,这样需要在 WebConfig extends WebMvcConfigurerAdapter 类里面再设置一下这个 MappingJackson2HttpMessageConverter

@Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                MappingJackson2HttpMessageConverter jsonMessageConverter = (MappingJackson2HttpMessageConverter) converter;
                ObjectMapper objectMapper = jsonMessageConverter.getObjectMapper();
                objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
                break;
            }
        }
    }

这样设置以后,输出的结果就是 2016-11-26T21:04:32 这样的字符串了。如果还不满意,可以自定义一个类继承那个 LocalDateTimeSerializer 类,重写一下 _defaultFormatter 即可。先看一下这个方法:

protected DateTimeFormatter _defaultFormatter() {
    return DateTimeFormatter.ISO_LOCAL_DATE_TIME;
}

可以看到,只要重新设置一下返回的 DateTimeFormatter 类即可。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章