Spring无法识别DateTime字段的格式

时间:2014-03-19 21:11:58

标签: java spring jsp datetime spring-mvc

我正在使用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应用程序中表单中的日期和时间字段?

1 个答案:

答案 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;