详解element-ui日期时间选择器的日期格式化问题
最近在做vue+element-ui的后台管理页面,其中用到了DateTimePicker来选择日期时间,在将数据传回后台的过程中遇到了一些令人头疼的问题,在此记录一下解决方案,以免日后遇到。
前端页面
前端代码
submitForm(formName) { this.$refs[formName].validate((valid) => { let url = 'http://localhost:8088/pethospital/order-record' let data = qs.stringify({ title: this.orderForm.title, hospitalId: this.orderForm.hospitalId, orderDate: this.orderForm.orderDate, orderType: this.orderForm.orderType, petVariety: this.orderForm.petVariety, mobilePhone: this.orderForm.mobilePhone, supplement: this.orderForm.supplement }) if (valid) { axios.post(url, data) .then(response => { }).catch(error => { this.$message({ message: '错误:' + error, type: true }) }) } else { this.$message('验证错误:请确认信息是否填写完整') } }); }
实体类代码
private Long id; private String title; private Integer hospitalId; private Date orderDate; private Integer orderType; private String petVariety; private String mobilePhone; private String supplement;
Controller代码
@PostMapping("/order-record") public CommonResult addOrderRecord(OrderRecordDO orderRecordDO) throws ParseException { System.out.println("添加的预约记录" + orderRecordDO); orderRecordDOMapper.insertSelective(orderRecordDO); return null; }
控制台输出
Field error in object 'orderRecordDO' on field 'orderDate': rejected value [2019-04-10 10:00:00]; codes [typeMismatch.orderRecordDO.orderDate,typeMismatch.orderDate,typeMismatch.java.util.Date,typeMismatch]; arguments [.springframework.context.support.DefaultMessageSourceResolvable: codes [orderRecordDO.orderDate,orderDate]; arguments []; default message [orderDate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'orderDate'; nested exception is .springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2019-04-10 10:00:00'; nested exception is java.lang.IllegalArgumentException]]
看了控制台的输出信息,大概知道是前端将日期当做String类型传输的,我们后台定义日期用的是Date类型,这里报的转换异常。本来我想用SimpleDateFormat来转换的,觉得这样很麻烦,然后在网上查找相关资料发现可以有更简单的方法。
尝试1
在实体类字段上添加@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date orderDate;
控制台输出
添加的预约记录{"id":null,"title":"测试1","hospitalId":1001,"orderDate":"Wed Apr 10 10:00:00 CST 2019","orderType":2001,"petVariety":"哈士奇","mobilePhone":"1000","supplement":"二哈"}
数据库记录
数据库记录
遇到的问题从数据库获取数据后在前端显示不友好
显示
尝试2 在实体类字段添加@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")和@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
/ timezone = "GMT+8"指定时区 / @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date orderDate;
前端显示效果这下就能显示成我们想要的效果了
前端显示
尝试3我的后台项目使用SpringBoot搭建的,我在application.yml文件中添加如下配置
# 配置数据源 spring: datasource: name: pet-hospital type: .alibaba.druid.pool.DruidDataSource url: jdbc:mysql://localhost:3306/pet_hospital?serverTimezone=GMT%2B8 driver-class-name: .mysql.cj.jdbc.Driver username: root password: 1741248769 # Vue前端传来的日期为String类型,狼蚁网站SEO优化的设置可以自动将其转换为Date类型,不需要手动转换 mvc: date-format: yyyy-MM-dd HH:mm:ss # 以下设置可以将Date类型自动转换为如下格式的日期,指定Jackson格式化日期使用的时区,Jackson默认使用UTC jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8
显示效果
显示
- 日期从前端传到后端(添加),由String类型解析成Date类型,从后端传到前端(查询),由Date类型解析成String类型
- 可以使用注解的方式,@DateTimeFormat、@JsonFormat
- 可以使用配置文件方式,spring.mvc.date-format、spring.jackson.date-format/time-zone
- 为什么要设置time-zone?因为Jackson默认使用UTC时区,所以需要手动指定时区为GMT+8
附原时间2019-04-12 12:00:00,相差8个小时
不指定时区
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 宿迁百度关键词排名指南:实现精准营销的关键
- 四川SEO优化怎么做网络推广
- 立昂技术备案老域名收购:如何为您的业务赋能
- 安徽百度关键词seo贵不贵,一般需要多少钱
- 吉林百度快照排名怎么做电话营销
- 多伦新手做SEO怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指