前后端传日期参数的格式问题汇总
·
日期格式不同传到后端可能会转换类型失败,即json字符串的日期格式转换为java日期格式出错。一般在后台配置即可解决,如下是实验后的总结:
一、后端用java.util.Date类型接收
1、前端传yyyy-MM-dd HH:mm:ss格式,后端用 java.util.Date 不需要加注解就可以接收
2、前端传yyyy-MM-dd 格式,后端用 java.util.Date 无法接收。
试了application.properties文件中加入 spring.jackson.date-format=yyyy-MM-dd
试了实体类日期属性上加
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime;
或者
@DateTimeFormat(pattern="yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startTime;
都不行
二、后端用java.sql.Date类型接收
1、前端传yyyy-MM-dd HH:mm:ss格式,后端用 java.sql.Date 无法接收,试了几个注解都不行
2、前端传yyyy-MM-dd 格式,后端用 java.sql.Date 不加任何注解就可以接收。
三、后端用Timestamp接收
后端用Timestamp类型接收日期参数,保证前后端一致即可,方法可以尝试以下两种:
1、application.propertis文件中加入
spring.jackson.date-format=yyyy-MM-dd 或yyyy-MM-dd HH:mm:ss
2、在实体类的日期类型属性上加注解
@JsonFormat(pattern = "yyyy-MM-dd") 或yyyy-MM-dd HH:mm:ss
private Timestamp deadline;
四、前台传入空字符串,后台接收日期类型报错
报错信息出现在还未进入controller之前,大概意思是类型转换错误。
解决方法有两种:
一、在controller类中加入下面代码
/**
* 解决前端传来日期为空的错误
*/
@InitBinder
public void InitBinder(WebDataBinder dataBinder)
{
dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
@Override
public void setAsText(String value) {
try {
setValue(new SimpleDateFormat("yyyy-MM-dd").parse(value));
} catch( ParseException e) {
setValue(null);
}
}
@Override
public String getAsText() {
return new SimpleDateFormat("yyyy-MM-dd").format((Date) getValue());
}
});
}
二、也可以全局配置类型转化,这样就不用在每一个controller中重复写代码了。
以上是做了几个简单实验得出的结论,如有不妥还望指正。
更多推荐
已为社区贡献4条内容
所有评论(0)