我正在使用Spring 3.2.4开发Web应用程序。我有一些表格,其中包含日期和时间。我的一块jsp:
<form:form method="post" action="/add" modelAttribute="licence">
...
<form:input type="datetime" path="beginDate"/>
<form:input type="datetime" path="endDate"/>
<form:input path="quantityLimit"/>
...
</form:form>
正常形式,没什么特别的。我正在使用datepicker,它以格式yyyy-MM-dd HH:mm
给出了日期,所以我已将其添加到我的控制器中:
@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
dateFormat.setLenient(true);
webDataBinder.registerCustomEditor(DateTime.class, new CustomDateEditor(dateFormat, true));
}
此外,我已将<mvc:annotation-driven/>
添加到我的servlet配置xml中,如某些博客中所述。
有目标控制器:
@RequestMapping(value = "/{softwareId}/licence/add", method = RequestMethod.POST)
public String addLicence(@PathVariable("softwareId") Long softwareId, Licence licence, Model model) {
Software software = softwareRepository.findOne(softwareId);
licence.setSoftware(software);
licenceRepository.save(licence);
return ADMIN_PATH + "softwareEdit";
}
软件类看起来像这样:
@Entity
@Table(name = "licences")
public class Licence {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "begin_date")
private DateTime beginDate;
@Column(name = "end_date")
private DateTime endDate;
@Column(name = "quantity_limit")
private Long quantityLimit;
@ManyToOne
private Software software;
//getters, setters, etc.
}
问题是:当我提交我的表单时,dateTime字段为空它完全正常,但是当我在日期字段中有任何内容时(无论格式是否正确)我得到HTTP Error 400: Bad Request
。在控制台中没有例外,只有不好的请求,但我很确定它与日期解析有关。
是否有一个很好的描述方法来处理Spring应用程序中表单中的日期和时间字段?
答案 0 :(得分:8)
让您的生活变得简单并使用@DateTimeFormat
,摆脱您的WebDataBinder
配置。似乎CustomDateEditor
仅适用于java.util.Date
,而Spring没有其他(默认/未指定)机制可以从String
转换为DateTime
。
@DateTimeFormat
就是这样一种机制。
@Column(name = "begin_date")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private DateTime beginDate;