這個困擾我已久的問題,今天終于解決了,之前看過好多博客,屢試不爽,今天終于解決了,在這里分享一下解決方案。
首先看@RequestBody
,當前端使用ajax,傳輸json數據的時候,只需要在實體的 Date屬性上加@JsonFormat
即可,因為springboot默認使用Jackson處理json
//controller
@RequestMapping("/save")
@ResponseBody
public String save(HttpServletRequest request, @RequestBody DutyBean dutyBean){
return null;
}
//bean
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
public class DutyBean implements Serializable {
private static final long serialVersionUID = -5999151785938349105L;
/**
* 事件名稱
*/
private String dutyName;
/**
* 創建人
*/
private Long createUser;
/**
* 創建時間
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 最后修改人
*/
private Long lastModifyUser;
/**
* 最后修改時間
*/
private Date lastModifyTime;
/**
* 是否完結
*/
private Integer isEnd;
/**
* 提醒時間
*/
private Date remindTime;
/**
* 是否提醒(1否,0是)
*/
private Integer isRemind;
/**
* 日志內容
*/
private String dutyLog;
/**
* 文件集合
*/
private List<DutyFileModel> fileList;
//省略get set
}
前端ajax需要加上
contentType: 'application/json;charset=utf-8',
data:JSON.stringify(json),
json的結構和 key,要和 bean里的結構、屬性名完全一致,bean里可以包含其他對象,例如fileList
json結構
再來看看不使用 json的時候,如何綁定Date
controller加如下代碼即可
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import java.beans.PropertyEditorSupport;
@InitBinder
public void InitBinder(WebDataBinder dataBinder) {
dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
public void setAsText(String value) {
try {
setValue(new SimpleDateFormat("yyyy-MM-dd").parse(value));
} catch(ParseException e) {
setValue(null);
}
}
public String getAsText() {
return new SimpleDateFormat("yyyy-MM-dd").format((Date) getValue());
}
});
}