无法将 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