Java @DateTimeFormat只对有限的模式起作用。为什么会这样?
我正在制作一个表格,接收两个注册日期,以查找在插入日期之间注册的用户列表 为了将表单中的输入绑定到命令实例的Java @DateTimeFormat只对有限的模式起作用。为什么会这样?,java,spring,date-format,Java,Spring,Date Format,我正在制作一个表格,接收两个注册日期,以查找在插入日期之间注册的用户列表 为了将表单中的输入绑定到命令实例的LocalDateTime类型的数据,我在命令实例中使用了@DateTimeFormat注释,但是,在这段代码中只有一种模式有效 只有yyyyMMddHH模式可以正常工作。其他模式,如yyyy-MM-dd,yyy/MM/dd,等等,都不起作用 它们抛出如下所示的异常 未能将类型为java.lang.String的属性值转换为所需的类型java.time.LocalDateTime,以用于来
LocalDateTime
类型的数据,我在命令实例中使用了@DateTimeFormat
注释,但是,在这段代码中只有一种模式有效
只有yyyyMMddHH
模式可以正常工作。其他模式,如yyyy-MM-dd
,yyy/MM/dd
,等等,都不起作用
它们抛出如下所示的异常
未能将类型为java.lang.String的属性值转换为所需的类型java.time.LocalDateTime,以用于来自的属性;嵌套异常为org.springframework.core.convert.ConversionFailedException:未能将值2020-08-13从类型[java.lang.String]转换为类型[@org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime];嵌套异常为java.lang.IllegalArgumentException:值[2020-08-13]的解析尝试失败
这是命令实例的代码
public class UserSearchByRegDateRequest {
@DateTimeFormat(pattern = "yyyyMMddHH")
private LocalDateTime from;
@DateTimeFormat(pattern = "yyyyMMddHH")
private LocalDateTime to;
public LocalDateTime getFrom() {
return from;
}
public void setFrom(LocalDateTime from) {
this.from = from;
}
public LocalDateTime getTo() {
return to;
}
public void setTo(LocalDateTime to) {
this.to = to;
}
}
表格的代码
<body>
<h2><spring:message code="regDateSearchFormTitle"/></h2>
<spring:message code="dateFormatInstruction"/><br/><br/>
<form:form action="processSearch" modelAttribute="searchCommand">
<label>
<form:input path="from"/><spring:message code="from"/>
<form:errors path="from"/>
</label>
<label>
<form:input path="to"/><spring:message code="to"/>
<form:errors path="to"/>
</label>
<input type="submit" value="search"/>
</form:form>
<c:if test="${!empty members}">
<table>
<tr>
<th><spring:message code="search.id"/></th>
<th><spring:message code="search.name"/></th>
<th><spring:message code="search.email"/></th>
<th><spring:message code="search.regDate"/></th>
</tr>
<c:forEach var="member" items="${members}">
<tr>
<td>${member.id}</td>
<td>${member.name}</td>
<td>${member.email}</td>
<td><tf:formatDateTime value="${member.registerDateTime}" pattern="yyyy-MM-dd"/></td>
</tr>
</c:forEach>
</table>
</c:if>
</body>
${member.id}
${member.name}
${member.email}
由于您试图仅转换日期“2020-08-13”,而未指定时间,因此应使用格式如下的LocalDate:
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate from;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate to;
然后,您可以将格式为“2020-08-13”的字符串转换为LocalDate,而不会引发异常。由于您尝试只转换日期“2020-08-13”,而不指定时间,因此应使用格式为以下格式的LocalDate:
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate from;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate to;
然后,您可以将格式为“2020-08-13”的字符串转换为LocalDate,而不会引发异常。对我来说,很明显,您无法从
yyy-MM-dd
分配LocalDateTime
。您希望它将一天的时间设置为什么?没有默认设置。如果您不想或不需要一天中的某个时间,请使用LocalDate
。非常感谢!对我来说,很明显,您不能从yyyy-MM-dd
分配LocalDateTime
。您希望它将一天的时间设置为什么?没有默认设置。如果您不想或不需要一天中的某个时间,请使用LocalDate
。非常感谢!非常感谢。我想我一直在使用LocalDateTime,但没有完全理解它是什么。谢谢!我想我一直在使用LocalDateTime,但没有完全理解它是什么。