首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

关于 localDateTime 返回前端的格式问题

  •  
  •   scyllaEo · 41 天前 · 1622 次点击
    这是一个创建于 41 天前的主题,其中的信息可能已经有所发展或是发生改变。
    "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());
    

    有没有人解答一下

    24 回复  |  直到 2019-07-16 08:26:22 +08:00
        1
    wu67   41 天前
    exm? 你的意思是要让前端显示 yyyy-MM-dd HH:mm:ss 这样? 直接把 long 丢过去让前端处理呀
        2
    telami   41 天前
    问题有很多种解决办法,没看懂你的选择
        3
    honeycomb   41 天前 via Android
    @wu67 他要让 mvc 的序列化机制直接把 LocalDateTime 转成 String
        4
    broadliyn   41 天前
    1. 看你前段返回时候序列化是用的 spring boot 自带的,还是自己另外建的 JsonUtil
    2. builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer()); 这个 builder 的来源是 1 里的哪一个?
        5
    yinzhili   41 天前
    字段上面加注解:
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonSerialize(using = LocalDateTimeSerializer.class)
        6
    scyllaEo   41 天前
    @yinzhili 要做统一处理,这样一个一个加就有点麻烦
        7
    scyllaEo   41 天前
    @broadliyn ``` @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {

    return builder -> {
    builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
    };
    ```
        8
    cyheng   41 天前
    objectMapper addDeserializer 试一下?
        9
    xfriday   41 天前
    用 RFC3339 ("2006-01-02T15:04:05Z07:00"),带上时区信息,方便前端做国际化处理
        10
    broadliyn   41 天前
    看一下,MappingJackson2HttpMessageConverter 和 JacksonAutoConfiguration
    目测是配置没有生效。
        11
    npe   41 天前
    @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)));
    };
    }


    }
        12
    npe   41 天前
    ``` 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)));
    };
    }


    }

    ```
        13
    liuawei   41 天前
    配置文件里面配置这个看下
    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
        14
    liuawei   41 天前
    或者重新 configureMessageConverters 这个方法
        15
    FleyX   41 天前   ♥ 1
    关于时间的前后端交互问题,从来都是用的时间戳。客户端可以格式化为任意格式。也不存在时区转换问题。
        16
    zhady009   41 天前
    @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());
    }

    }
        17
    alangz   41 天前
    如果用的是 Jackson,你需要配置加载 jsr310 的 JavaTimeModule 模块儿,并配置关闭 WRITE_DATES_AS_TIMESTAMPS。
        18
    alangz   41 天前
    补充下,看到你这个返回结果就是没有添加这个模块儿。
        19
    qiyuey   41 天前 via Android
    建议走 ISO 标准格式,就是带 T 的那个
        20
    WispZhan   41 天前 via Android
    请你返回时间戳谢谢。
        21
    bringyou   41 天前
    用的是 springboot 吗?是的话要配置下 JacksonSerializer 里面的 objectMapper,它里面是自己 new 出来的,不会用 #7 中的提供的 objectMapper,那个只是单纯的 objectMapper
        22
    bringyou   41 天前
    #21 勘误
    "那个只是单纯的 objectMapper" -> “那个 objectMapper 只是单纯的放到 context 里面,Spring 组件如 JacksonSerializer 基本不会用这个,都是自己 new 的”
        23
    saberscarlet   41 天前 via Android
    是不是某个类加了 @EnableWebMvc
        24
    choice4   41 天前 via Android
    Convert 里面 mapper 注册上 java8 模块
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3298 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 05:12 · PVG 13:12 · LAX 22:12 · JFK 01:12
    ♥ Do have faith in what you're doing.