这个困扰我已久的问题,今天终于解决了,之前看过好多博客,屡试不爽,今天终于解决了,在这里分享一下解决方案。
首先看@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的时候,如何绑定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());
}
});
}
网友评论