SpringBoot 前后端日期格式转换

在springboot,注解的json默认序列化中,日期格式默认为:类型的显示。在实际应用,我们需要对其转换成我们需要的显示格式。

一、单个设置

方式1:配置文件修改

application.yml文件

spring:  # 配置日期格式化

      jackson:

             date-format: yyyy-MM-dd HH:mm:ss  #时间戳统一转换为指定格式

             time-zone: GMT+8  # 时区修改为东8区 

application.properties文件:

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

spring.jackson.time-zone=GMT+8

方式2:在javabean实体类上加注解

a、JsonFormat注解:将date转json

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

private Date createTime;

b、DateTimeFormat注解:将json转date

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

 private Date createTime;

c Temporal注解,自带参数

其中,TemporalType.TIMESTAMP转为格式,TemporalType.TIME转为格式,TemporalType.DATE转为格式

@Temporal(TemporalType.TIMESTAMP)

private Date createTime;

二、全局配置

1、从页面接收的String和json格式的日期字符,转换为Date类型

@Component

public class GlobalFormDateConvert implements Converter<String, Date> {



    //静态初始化定义日期字符串参数列表(需要转换的)

    private static final List<String> paramList = new ArrayList<>();



    //静态初始化日期格式

    private static final String param1 = "yyyy-MM";

    private static final String param2 = "yyyy-MM-dd";

    private static final String param3 = "yyyy-MM-dd HH:mm";

    private static final String param4 = "yyyy-MM-dd HH:mm:ss";



    //静态代码块,将日期参数加入到列表中

    static {

        paramList.add(param1);

        paramList.add(param2);

        paramList.add(param3);

        paramList.add(param4);

    }



    //自定义函数,将字符串转Date  参1:传入的日期字符串  参2:格式参数

    public Date parseDate(String source, String format) {

        System.out.println("parseDate转换日期");

        Date date = null;

        try {

            //日期格式转换器

            DateFormat dateFormat = new SimpleDateFormat(format);

            date = dateFormat.parse(source);

        } catch (Exception e) {

            e.printStackTrace();

        }

        return date;

    }





    //convert转换方法 ,s是将会传递过来的日期的字符串

    @Override

    public Date convert(String source) {



        System.out.println("convert日期格式转换器");

        if(StringUtils.isEmpty(source)){

            return null;

        }

        source = source.trim();   //去除首尾空格

        DateFormat dateFormat = new SimpleDateFormat(param1);



        //正则表达式判断是哪一种格式参数

        if (source.matches("^\\d{4}-\\d{1,2}$")) {

            return parseDate(source, paramList.get(0));

        } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {

            return parseDate(source, paramList.get(1));

        } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {

            return parseDate(source, paramList.get(2));

        } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {

            return parseDate(source, paramList.get(3));

        } else {

            throw new IllegalArgumentException("还未定义该种字符串转Date的日期转换格式 " + source);

        }

    }

}

2、  Json数据转Date,全局日期转换器

public class GlobalJsonDateConvert extends StdDateFormat {

    //静态初始化final,共享

    public static final GlobalJsonDateConvert instance = new GlobalJsonDateConvert();

    @Override

    public Date parse(String dateStr, ParsePosition pos) {

        return getDate(dateStr, pos);

    }



    @Override

    public Date parse(String dateStr) {

        ParsePosition pos = new ParsePosition(0);

        return getDate(dateStr, pos);

    }



    private Date getDate(String dateStr, ParsePosition pos) {

        System.out.println("json格式日期转换");

        SimpleDateFormat sdf = null;

        if (StringUtils.isEmpty(dateStr)) {

            return null;

        } else if (dateStr.matches("^\\d{4}-\\d{1,2}$")) {

            sdf = new SimpleDateFormat("yyyy-MM");

            return sdf.parse(dateStr, pos);

        } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {

            sdf = new SimpleDateFormat("yyyy-MM-dd");

            return sdf.parse(dateStr, pos);

        } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {

            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");

            return sdf.parse(dateStr, pos);

        } else if (dateStr.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {

            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            return sdf.parse(dateStr, pos);

        } else if (dateStr.length() == 23) {

            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

            return sdf.parse(dateStr, pos);

        }

        return super.parse(dateStr, pos);

    }



    @Override

    public StringBuffer format(Date date, StringBuffer toAPPendTo, FieldPosition fieldPosition){

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        return sdf.format(date, toAPPendTo, fieldPosition);

    }



    @Override

    public GlobalJsonDateConvert clone() {

        return new GlobalJsonDateConvert();

    }

}

3、 配置bean


@Configuration

public class WebConfig {

    //JSON格式 全局日期转换器配置

    @Bean

    public MAPPingJackson2HttpMessageConverter getMAPPingJackson2HttpMessageConverter() {

        MAPPingJackson2HttpMessageConverter mAPPingJackson2HttpMessageConverter = new MAPPingJackson2HttpMessageConverter();



        ObjectMAPPer objectMAPPer = new ObjectMAPPer();

        objectMAPPer.setDateFormat(GlobalJsonDateConvert.instance);

        objectMAPPer.setSerializationInclusion(JsonInclude.Include.NON_NULL);

        mAPPingJackson2HttpMessageConverter.setObjectMAPPer(objectMAPPer);



        List<MediaType> list = new ArrayList<MediaType>();

        list.add(MediaType.APPLICATION_JSON_UTF8);

        mAPPingJackson2HttpMessageConverter.setSupportedMediaTypes(list);

        return mAPPingJackson2HttpMessageConverter;

    }



    //表单格式 全局日期转换器

    @Bean

    @Autowired

    public ConversionService getConversionService(GlobalFormDateConvert globalDateConvert){

        ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean();

        Set<Converter> converters = new HashSet<>();

        converters.add(globalDateConvert);

        factoryBean.setConverters(converters);

        return factoryBean.getObject();

    }

}

注意:全局配置不起作用时,查看工程是否有实现了WebMvcConfigurer配置的类,在其中进行全局配置。代码如下:

@EnableWebMvc

@Configuration

public class MyWebMvcConfigurer implements WebMvcConfigurer {



    @Override

    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

        converters.add(new ByteArrayHttpMessageConverter());

        converters.add(new StringHttpMessageConverter());

        converters.add(new ResourceHttpMessageConverter());

        converters.add(new AllEncompassingFormHttpMessageConverter());

        converters.add(new StringHttpMessageConverter());

        converters.add(jackson2HttpMessageConverter());

    }



    /**

     * 时间格式转换器,将Date类型统一转换为yyyy-MM-dd HH:mm:ss格式的字符串

     *

     * @return

     */

    @Bean

    public MAPPingJackson2HttpMessageConverter jackson2HttpMessageConverter() {

        MAPPingJackson2HttpMessageConverter converter = new MAPPingJackson2HttpMessageConverter();

        ObjectMAPPer mAPPer = new ObjectMAPPer();



        //日期格式转换

        mAPPer.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        mAPPer.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));

        mAPPer.setDateFormat(new SimpleDateFormat(Constants.GLOBAL_TIME_FORMAT));



        //Long类型转String类型

        SimpleModule simpleModule = new SimpleModule();

        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);

        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);

        mAPPer.registerModule(simpleModule);



        converter.setObjectMAPPer(mAPPer);

        return converter;

    }



    @Override

    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {

        configurer.enable();

    }



}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SpringBoot 前后端分离项目中,配置全局 LocalDateTime 日期格式转换器可以方便地将前端传递过来的日期字符串换为 LocalDateTime 类型,以便后续进行处理。 以下是配置全局 LocalDateTime 日期格式转换器的方法: 1. 创建一个 LocalDateTimeFormatConfig 类,用于配置日期格式转换器: ```java @Configuration public class LocalDateTimeFormatConfig { @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } @Bean public WebMvcConfigurer webMvcConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new StringToLocalDateTimeConverter()); } }; } private static class StringToLocalDateTimeConverter implements Converter<String, LocalDateTime> { @Override public LocalDateTime convert(String source) { return LocalDateTime.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } } } ``` 2. 上面的代码中,首先使用 Jackson2ObjectMapperBuilderCustomizer 配置了 Jackson 库的 LocalDateTime 序列化器,将 LocalDateTime 类型换为指定格式的日期字符串。 3. 然后使用 WebMvcConfigurer 配置了一个 StringToLocalDateTimeConverter 类型的换器,将前端传递过来的日期字符串换为 LocalDateTime 类型。 4. 最后,将 LocalDateTimeFormatConfig 类添加到 SpringBoot 项目的配置类中即可: ```java @SpringBootApplication @Import({LocalDateTimeFormatConfig.class}) public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 这样,在 SpringBoot 前后端分离项目中,就可以方便地进行全局 LocalDateTime 日期格式转换了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值