java后端统⼀处理接收⽇期格式转换
后端统⼀处理接收⽇期格式转换
问题现象
前端传回参数⽇期格式为yyyy-MM-dd HH:mm:ss,后端默认解析格式是yyyy/MM/dd HH:mm:ss,请求时回报错参数格式错误。
解决⽅法1:
接收参数的实体类中属性字段上添加@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
列:
/**
* 属性addTime( 添加时间)
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date addTime;
解决⽅案⼆:
这样每个接收⽇期时间的实体类上都要添加⿇烦后端数据绑定预处理⽇期格式
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
import java.util.Date;
/**
* 参数预处理
*
string转date的方法*/
@ControllerAdvice("某某包.某某包.controller")//列@ControllerAdvice("ller")他会拦截你这个报下的请求
public class DateControllerAdvice {
/**
* 将传⼊的⽇期格式转换成Date类型
*/
@InitBinder
protected void initBinder(WebDataBinder binder) {
}
}
通过继承PropertyEditorSupport 使⽤setAsText⽅法来转换完⽇期格式并将转换后的值设置回去。
import org.apachemons.lang.StringUtils;
import org.apachemons.lang.time.DateFormatUtils;
import org.apachemons.lang.time.DateUtils;
import java.beans.PropertyEditorSupport;
ParseException;
import java.util.Date;
/**
* 处理前端传⼊⽇期格式转换
*/
public class DateEditor extends PropertyEditorSupport {
/**
* 默认的⽇期格式
*/
private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 能够进⾏转换的⽇期格式
* 能够进⾏转换的⽇期格式
*/
public static final String[] DATE_PATTERNS = new String[] { "yyyy", "yyyy-MM", "yyyyMM", "yyyy/MM", "yyyy-MM-dd", "yyyyMMdd", "yyyy/MM/dd", "yyyy-MM-dd HH:mm:ss", "yyyyMMddHHmmss", "yyyy/MM/dd HH:mm:ss" };
/**
* 是否将空转换为null
*/
private boolean emptyAsNull;
/**
* ⽇期格式
*/
private String dateFormat = DEFAULT_DATE_FORMAT;
public DateEditor(boolean emptyAsNull) {
}
public DateEditor(boolean emptyAsNull, String dateFormat) {
this.dateFormat = dateFormat;
}
/**
* 获取⽇期
*/
@Override
public String getAsText() {
Date value = (Date) getValue();
return value != null ? DateFormatUtils.format(value, dateFormat) : StringUtils.EMPTY;
}
/**
* 设置⽇期
*/
@Override
public void setAsText(String text) {
if (text != null) {
String value = im();
if (emptyAsNull && StringUtils.isEmpty(text)) {
setValue(null);
} else {
try {
setValue(DateUtils.parseDate(value, DATE_PATTERNS));
} catch (ParseException e) {
setValue(null);
}
}
} else {
setValue(null);
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论