软件系统定制开发JSON parse error: Cannot deserialize value of type `java.util.Date` from String

DateTimePicker + @("yyyy-MM-dd HH:mm:ss")软件系统定制开发日期格式转换异常

软件系统定制开发最近在学习,软件系统定制开发练习一个项目使用的是yyyy-MM-dd HH:mm:ss格式的,在后端Java与MySQL这边的转换中一开始格式没有统一间歇性的就会报异常,后面采用了一个@DateTimeFormat("yyyy-MM-dd HH:mm:ss")注解标注在属性上规范了 Date 类型属性的格式(埋坑~)

  1. // 开始时间
  2. @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  3. private Date startTime;
  4. // 结束时间
  5. @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  6. private Date endTime;

在前端这边使用的是的日期时间组件DatePicker

  1. <el-form-item label="开始时间:" prop="startTime">
  2. <el-date-picker
  3. type="datetime"
  4. placeholder="选择日期"
  5. v-model="homeAdvertise.startTime">
  6. </el-date-picker>
  7. </el-form-item>
  8. <el-form-item label="到期时间:" prop="endTime">
  9. <el-date-picker
  10. type="datetime"
  11. placeholder="选择日期"
  12. v-model="homeAdvertise.endTime">
  13. </el-date-picker>
  14. </el-form-item>

使用该组件进行新增&修改操作的时候一直抛异常,如下所示

JSON parse error: Cannot deserialize value of type `java.util.Date` from String "2020-01-30T16:00:00.000Z": expected format "yyyy-MM-dd HH:mm:ss"

网上搜了好多资料,几乎都是说在后端属性上添加注解的

  1. @JsonFormat(shape = JsonFormat.Shape.STRING,
  2. pattern="yyyy-MM-dd HH:mm:ss",
  3. timezone = "GMT+8")
  4. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  5. @JsonField(format = "yyyy-MM-dd HH:mm:ss" )

这些注解都使过了,还是不能解决异常问题,花了好长时间找怎么解决bug好烦;

后面在大佬的提示下去看了,在DatePicker这个组件的Attributes中看到了format

原来输入框默认是Date对象  返回给后端是 "2020-01-30T16:00:00.000Z" ISO 日期格式

ISO 日期格式:
ISO 日期格式(ISODatetime)是 ISO 8601 标准规定的时间表示方式。云点播如无特别指定,所有时间相关参数统一采用 ISO 8601 表示的 UTC 时间,格式为 YYYY-MM-DDThh:mm:sssZ。如:2018-10-01T10:00:00Z,表示北京时间2018年10月01日18点00分00秒(北京时间值 = UTC 时间值 + 8小时)。

format 显示在输入框中的格式 string 见 yyyy-MM-dd HH:mm:ss

因为使用的是动态变量,所以在该组件中添加了value-format属性,设置了与后台对应的格式

  1. <el-form-item label="开始时间:" prop="startTime">
  2. <el-date-picker
  3. type="datetime"
  4. placeholder="选择日期"
  5. v-model="homeAdvertise.startTime"
  6. value-format="yyyy-MM-dd HH:mm:ss">
  7. </el-date-picker>
  8. </el-form-item>
  9. <el-form-item label="到期时间:" prop="endTime">
  10. <el-date-picker
  11. type="datetime"
  12. placeholder="选择日期"
  13. v-model="homeAdvertise.endTime"
  14. value-format="yyyy-MM-dd HH:mm:ss">
  15. </el-date-picker>
  16. </el-form-item>

这样前端响应给后端的数据就是"yyyy-MM-dd HH:mm:ss"了,Java与MySQL交互没有异常了。

翻了大半天的资料,终于解决了问题,得记录一下,学习起来才行!

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发