springboot技术之处理前后端时间传输格式问题(LocalDate <=>String)

springboot配置时间字符串之间的转换器

1、后端将时间转成String传给前端

在基础配置类baseConfig类中Alt+insert,然后Override如下这个方法
LocalDate等都是Java8的新特性,需要借助javaTimeModule,这个本身有其对应的格式规则,但是不是我们想要的,我们需要覆盖重写原来的

 @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
     
        ObjectMapper objectMapper = new ObjectMapper();

        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
        JavaTimeModule javaTimeModule = new JavaTimeModule();

        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

        objectMapper.registerModule(javaTimeModule);
        converters.add(new MappingJackson2HttpMessageConverter(objectMapper));
    }

2、后端接收前端传过来的String转成时间类型

这里根据pojo类中字段类型去找对应的方法,这里几个时间类都有对应的转换

1、基础配置类baseConfig类重写如下方法,将相应的转换器注册进来。

@Override
    protected void addFormatters(FormatterRegistry registry) {
     
        registry.addConverter(localDateTimeConverter);
        registry.addConverter(localDateConverter);
        registry.addConverter(dateConverter);
    }

2、配置每个转换器类,都要实现对应的接口Converter
(1)dateConverter

package com.neuedu.config.convert;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;

/**
 * 项目    : his-server
 * 创建时间 :2020/8/26  9:38 26
 * author  :jshand
 * site    :  http://314649444.iteye.com
 * 描述     :
 */
@Component
public class DateConverter implements Converter<String, Date> {
     
    //2020-08-26%2001:02:03
    static List<SimpleDateFormat> formatter = new ArrayList();
    static{
     
        formatter.add(new SimpleDateFormat("yyyy-MM-dd"));
        formatter.add(new SimpleDateFormat("yyyy-MM-dd HH:mm"));
        formatter.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        formatter.add(new SimpleDateFormat("yyyy/MM/dd"));

    }


    @Override
    public Date convert(String source) {
     
        try {
     
            if(Pattern.matches("\\d{4}-\\d{2}-\\d{2}",source)){
     
                return formatter.get(0).parse(source);
            }
            if(Pattern.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}",source)){
     
                return formatter.get(1).parse(source);
            }
            if(Pattern.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}",source)){
     
                return formatter.get(2).parse(source);
            }
            if(Pattern.matches("\\d{4}/\\d{2}/\\d{2}",source)){
     
                return formatter.get(2).parse(source);
            }
        } catch (ParseException e) {
     
            e.printStackTrace();
        }
        return null;
    }
}

(2)localDateConverter

package com.neuedu.config.convert;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

/**
 * 项目    : his-server
 * 创建时间 :2020/8/26  9:29 26
 * author  :jshand
 * site    :  http://314649444.iteye.com
 * 描述     :
 */
@Component
public class LocalDateConverter implements Converter<String, LocalDate> {
     
    //2020-08-26%2001:02:03
    @Override
    public LocalDate convert(String s) {
     
        return LocalDate.parse(s, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }
}

(3)LocalDateTimeConverter

package com.neuedu.config.convert;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 项目    : his-server
 * 创建时间 :2020/8/26  9:29 26
 * author  :jshand
 * site    :  http://314649444.iteye.com
 * 描述     :
 */
@Component
public class LocalDateTimeConverter implements Converter<String, LocalDateTime> {
     
    //2020-08-26%2001:02:03
    @Override
    public LocalDateTime convert(String s) {
     
        return LocalDateTime.parse(s, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
}

你可能感兴趣的:(java,spring)