无法将 java.lang.String 类型的值转换为所需的 java.util.Date 类型
Posted
技术标签:
【中文标题】无法将 java.lang.String 类型的值转换为所需的 java.util.Date 类型【英文标题】:Failed to convert value of type java.lang.String to required type java.util.Date 【发布时间】:2017-01-28 17:43:58 【问题描述】:<form th:action="@home" method="get">
<div class="form-group">
<label>from date:</label> <input type="date" pattern="yyyy-MM-dd" name="d1" th:value="$d1" />
<label>to date:</label> <input type="date" pattern="yyyy-MM-dd" name="d2" th:value="$d2" />
<button type="submit">Trouver</button>
</div>
</form>
这是控制器代码部分:
@RequestParam(name = "d1", defaultValue = "1900-01-01") @DateTimeFormat(pattern = "yyyy-MM-dd") Date d1,
@RequestParam(name = "d2", defaultValue = "2200-01-01") @DateTimeFormat(pattern = "yyyy-MM-dd") Date d2)
我收到这条消息:
出现意外错误(类型=错误请求,状态=400)。失败的 将 [java.lang.String] 类型的值转换为所需类型 [java.util.Date];嵌套异常是 org.springframework.core.convert.ConversionFailedException: 失败 从类型 [java.lang.String] 转换为类型 [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.util.Date] 价值 'Wed Jun 08 00:00:00 WET 2016';嵌套异常是 java.lang.IllegalArgumentException:值的解析尝试失败 [2016 年 6 月 8 日星期三 00:00:00 WET]
【问题讨论】:
你能出示你的日期类型声明吗?或尝试像这样添加@DateTimeFormat(pattern = "yyyy-MM-dd"):@DateTimeFormat(pattern = "yyyy-MM-dd") private Date your_variable; 【参考方案1】:您已使用注释 @DateTimeFormat(pattern = "yyyy-MM-dd") 在控制器类中正确设置模式。并且请确保您拥有: 在您的模型/实体类中导入了两个必需的模式:
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Temporal(TemporalType.DATE)
private Date date;
希望它有用。因为它对我有用。
【讨论】:
【参考方案2】:您为 html 输入元素指定的模式无法按预期工作。您没有为此设置日期格式,并且从错误消息中可以看出,spring 尝试解析的日期是
Wed Jun 08 00:00:00 WET 2016
不是您在 html 和控制器中设置的格式的任何日期(html 模式不会修改发送的格式,它用于验证目的)。
我从来没有用过,但你应该要么
只需删除完整的模式和格式,看看是否可行(我猜可以) 根据我在上面发布的日期格式(以及您的错误消息),在您的控制器模式中设置正确的日期格式。这里:
@DateTimeFormat(pattern = "yyyy-MM-dd")
【讨论】:
模式不是他的问题。如果您阅读错误消息,它会指出它无法将 java.lang.String 类型转换为 java.util.Date。这将需要使用 SimpleDateFormat 或类似的东西将日期解析为日期。以上是关于无法将 java.lang.String 类型的值转换为所需的 java.util.Date 类型的主要内容,如果未能解决你的问题,请参考以下文章
出现错误:无法反序列化对象。无法将 java.lang.String 类型的值转换为 long
无法将类型 [org.springframework.web.multipart.MultipartFile] 的值转换为所需类型 [java.lang.String]
表单提交错误,无法将类型“java.lang.String”的值转换为浏览器中所需的类型错误,在 Spring MVC 中
com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的值转换为 long
Spring @PreAuthorize hasAuthority 异常无法从类型 [java.lang.String] 转换为类型 [java.lang.Boolean] 的值'hasAuthori
org.json.JSONException:java.lang.String 类型的值 <br 无法转换为 JSONObject