springboot+mybatis+thymeleaf关于前后台日期格式化问题总结

首先数据库字段是:date和datetime类型

对应的mybatis映射文件的jdbcType是DATE和TIMESTAMP

第一个问题:表单提交数据含date类型的参数

如果后台不做任何处理的话会直接报错,大概意思是字符串String不能转化为Date类型

方法一:在启动类加入格式化代码,该方法兼容三种类型格式的参数,其他格式稍作修改即可

private static final String dateFormat = "yyyy-MM-dd HH:mm:ss";
    private static final String shortDateFormat = "yyyy-MM-dd";
    
	@Bean
    public Converter<String, Date> addNewConvert() {
        return new Converter<String, Date>() {
            @Override
            public Date convert(String value) {
            	if("".equals(value) || value == null) {
            		return null;
            	}
            	
            	value = value.trim();
            	
            	try {
                    if(value.contains("-")) {
                        SimpleDateFormat formatter;
                        if(value.contains(":")) {
                            formatter = new SimpleDateFormat(dateFormat);
                        }else {
                            formatter = new SimpleDateFormat(shortDateFormat);
                        }

                        Date dtDate = formatter.parse(value);
                        return dtDate;              
                    }else if(value.matches("^\\d+$")) {
                        Long lDate = new Long(value);
                        return new Date(lDate);
                    }
                } catch (Exception e) {
                    throw new RuntimeException(String.format("parser %s to Date fail", value));
                }
                throw new RuntimeException(String.format("parser %s to Date fail", value));
             
            }
        };
    }

这种方法的结果是:

优点: 在用thymeleaf模板的时候,在前台页面 我可以根据页面的需要随意的格式化成想要的显示效果

缺点:在接口访问的时候,比如postman测试接口,这个时候时间会直接显示为一个时间戳 


问题二:读取数据的时候时间格式不对,显示的是时间戳,或者是国际格式的时间;对于时间戳解决方法

解决方法:在bean类中对应的属性上加上注解
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+5:30")

pattern是格式累心,timezone是时间偏移量;我的项目应用于印度市场所有时间偏移量是+5:30,北京时间是+8

这种方法在接口测试中有用,在thymeleaf里面无效,用#dates.format(date,'yyyy-MM-dd hh:mm:dd')格式也无效

 

方法二:直接将bean类的对应属性的类型改为String类型;

优点:表单提交的时候  后台不需要做任何处理,可以直接接受string参数

缺点:1.比如是一个datetime类型的,页面显示不要时分秒了   就得单独对其进行格式化

           2.假如需要对时间进行计算(比如计算两个时间差),又得重新转类型

 

权衡利弊,根据实际情况取舍吧;

平时做项目的时候遇到几次,记录的时候一下子也想不到所有情况,如有补充,敬请留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值