spring boot+spring jpa+hibernate 为date类型的属性传入null值报错

1.项目配置

项目框架 spring boot + spring jpa +hibernate

2.情况描述

实体类中存在date类型的字段

@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@Column(name = "refilme_time")
@Temporal(value = TemporalType.DATE)
private Date refilmdate;
在前端未设置改属性的值,该值默认为null,报如下错误

2021-05-28 17:18:10.893 WARN 9064 --- [nio-7779-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'issue' on field 'refilmdate': rejected value [null]; codes [typeMismatch.issue.refilmdate,typeMismatch.refilmdate,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [issue.refilmdate,refilmdate]; arguments []; default message [refilmdate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'refilmdate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.format.annotation.DateTimeFormat @com.fasterxml.jackson.annotation.JsonFormat @javax.persistence.Column @javax.persistence.Temporal java.util.Date] for value 'null'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [null]]]

3.解决方案

在controller中为date类型注册customEditor即可

@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());
}
});
}

posted on 2021-05-28 17:36  jejas  阅读(714)  评论(0编辑  收藏  举报