"createTime": {
        "dayOfMonth": 15,
        "dayOfWeek": "MONDAY",
        "dayOfYear": 196,
        "month": "JULY",
        "year": 2019,
        "monthValue": 7,
        "hour": 14,
        "minute": 50,
        "nano": 0,
        "second": 40,
        "chronology": {
          "id": "ISO",
          "calendarType": "iso8601"
        }
      }
上述就是返回的格式。请问这是为啥,已经在 WebMvcConfigurer 配置了 pattern,并且注册到容器了。
@Bean
public LocalDateTimeSerializer localDateTimeDeserializer() {
   return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
//注册
builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
有没有人解答一下
|  |      1wu67      2019-07-15 16:54:18 +08:00 exm? 你的意思是要让前端显示 yyyy-MM-dd HH:mm:ss 这样? 直接把 long 丢过去让前端处理呀 | 
|  |      2telami      2019-07-15 17:01:12 +08:00 问题有很多种解决办法,没看懂你的选择 | 
|  |      4broadliyn      2019-07-15 17:09:59 +08:00 1. 看你前段返回时候序列化是用的 spring boot 自带的,还是自己另外建的 JsonUtil 2. builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer()); 这个 builder 的来源是 1 里的哪一个? | 
|      5yinzhili      2019-07-15 17:10:36 +08:00 字段上面加注解: @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonSerialize(using = LocalDateTimeSerializer.class) | 
|      7scyllaEo OP | 
|  |      8cyheng      2019-07-15 17:19:36 +08:00 objectMapper addDeserializer 试一下? | 
|  |      9xfriday      2019-07-15 17:39:15 +08:00 用 RFC3339 ("2006-01-02T15:04:05Z07:00"),带上时区信息,方便前端做国际化处理 | 
|  |      10broadliyn      2019-07-15 17:40:56 +08:00 看一下,MappingJackson2HttpMessageConverter 和 JacksonAutoConfiguration 目测是配置没有生效。 | 
|  |      11npe      2019-07-15 17:43:46 +08:00 @Configuration public class ApiConfiguration implements WebMvcConfigurer { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.defaultContentType(MediaType.APPLICATION_JSON_UTF8); } private static final String DATE_FORMAT = "yyyy-MM-dd"; private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; @Bean public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { return builder -> { builder.simpleDateFormat(DATE_TIME_FORMAT); builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_FORMAT))); builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_FORMAT))); }; } } | 
|  |      12npe      2019-07-15 17:44:07 +08:00 ``` Java @Configuration public class ApiConfiguration implements WebMvcConfigurer { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.defaultContentType(MediaType.APPLICATION_JSON_UTF8); } private static final String DATE_FORMAT = "yyyy-MM-dd"; private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; @Bean public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { return builder -> { builder.simpleDateFormat(DATE_TIME_FORMAT); builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_FORMAT))); builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_FORMAT))); }; } } ``` | 
|      13liuawei      2019-07-15 18:43:49 +08:00 配置文件里面配置这个看下 spring.mvc.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 | 
|      14liuawei      2019-07-15 18:46:09 +08:00 或者重新 configureMessageConverters 这个方法 | 
|      15FleyX      2019-07-15 18:48:26 +08:00  1 关于时间的前后端交互问题,从来都是用的时间戳。客户端可以格式化为任意格式。也不存在时区转换问题。 | 
|      16zhady009      2019-07-15 19:15:24 +08:00 @Configuration public class LocalDateTimeFormatter { @Bean public LocalDateTimeSerializer localDateTimeDeserializer() { return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DateFormat.NORMAL_DATE)); } @Bean public LocalDateSerializer localDateDeserializer() { return new LocalDateSerializer(DateTimeFormatter.ofPattern(DateFormat.SHORT_DATE)); } @Bean public LocalTimeSerializer localTimeDeserializer() { return new LocalTimeSerializer(DateTimeFormatter.ofPattern(DateFormat.NORMAL_TIME)); } @Bean public Jackson2ObjectMapperBuilderCustomizer localDateTimeDeserializerCustomizer() { return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer()); } @Bean public Jackson2ObjectMapperBuilderCustomizer localDateDeserializerCustomizer() { return builder -> builder.serializerByType(LocalDate.class, localDateDeserializer()); } @Bean public Jackson2ObjectMapperBuilderCustomizer localTimeDeserializerCustomizer() { return builder -> builder.serializerByType(LocalTime.class, localTimeDeserializer()); } } | 
|      17alangz      2019-07-15 19:23:21 +08:00 如果用的是 Jackson,你需要配置加载 jsr310 的 JavaTimeModule 模块儿,并配置关闭 WRITE_DATES_AS_TIMESTAMPS。 | 
|      18alangz      2019-07-15 19:24:20 +08:00 补充下,看到你这个返回结果就是没有添加这个模块儿。 | 
|  |      19qiyuey      2019-07-15 19:45:04 +08:00 via Android 建议走 ISO 标准格式,就是带 T 的那个 | 
|      20WispZhan      2019-07-15 20:06:04 +08:00 via Android 请你返回时间戳谢谢。 | 
|      21bringyou      2019-07-15 21:40:57 +08:00 用的是 springboot 吗?是的话要配置下 JacksonSerializer 里面的 objectMapper,它里面是自己 new 出来的,不会用 #7 中的提供的 objectMapper,那个只是单纯的 objectMapper | 
|      22bringyou      2019-07-15 21:49:22 +08:00 #21 勘误 "那个只是单纯的 objectMapper" -> “那个 objectMapper 只是单纯的放到 context 里面,Spring 组件如 JacksonSerializer 基本不会用这个,都是自己 new 的” | 
|  |      23saberscarlet      2019-07-15 22:01:13 +08:00 via Android 是不是某个类加了 @EnableWebMvc | 
|      24choice4      2019-07-16 08:26:22 +08:00 via Android Convert 里面 mapper 注册上 java8 模块 | 
|  |      25RRRSSS      2020-12-10 16:00:28 +08:00 处理时间这块挺麻烦的,我一般直接存时间戳,字段是 long 。然后前端自己去处理,想要什么都可以,这样他们其实更方便,对后端也更合理。 |