由于日期值,Grails LazyMap 到 POJO 的转换失败

Posted

技术标签:

【中文标题】由于日期值,Grails LazyMap 到 POJO 的转换失败【英文标题】:Grails LazyMap to POJO Conversion failed due to Date value 【发布时间】:2016-09-14 19:35:45 【问题描述】:

我正在使用 Grails 2.4 和 jersey request builder 插件。

我遇到以下错误

def resRequestList = RESPONSE FROM REST REQUEST
ResourceTest item1 = resRequestList.get(0)

错误是

Cannot cast object 'createdBy=2576, endDate=10-Jun-2016, id=14'
with class 'groovy.json.internal.LazyMap' to class 'com.modal.resource.ResourceTest' 

due to: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '10-Jun-2016' with class 'java.lang.String' to class 'java.util.Date'

从 Sting 到 Date 的转换似乎失败。

我需要解决方案将其自动映射到 POJO,而不会出现字符串到日期对话错误。

应该有任何东西在铸造之前进行预处理。

请帮忙。

【问题讨论】:

你可能想检查一下:notetodogself.blogspot.sg/2010/12/… 【参考方案1】:

您可以在ResourceTest 类的日期字段中添加@BindingFormat('dd-MMM-yyyy') 注释。您还可以使用grails.databinding.dateFormats 配置选项来设置默认的全局绑定格式。有关详细信息,请参阅此答案:Binding a Grails date from params in a controller。

我还建议不要将月份发送为 Jun,因为这是特定于区域设置的,并且可能无法根据您的环境工作。

【讨论】:

嗨,卓戈。感谢您的回复,我的 ResourceTest 类是 POJO 而不是 POGO。如何在 POJO 类中添加 @BindingFormat('dd-MMM-yyyy')。【参考方案2】:

最后我找到了最适合我的替代解决方案。

我使用反射来获取原始对象列表,使用 GenericType。

我的代码如下

def resRequestList = clientResponse.getEntity(new GenericType<ArrayList<ResourceTest>>());

【讨论】:

以上是关于由于日期值,Grails LazyMap 到 POJO 的转换失败的主要内容,如果未能解决你的问题,请参考以下文章

Grails,Field 的域类默认值

从 json 文件中解析 grails 中的日期

反应不改变本地状态下拉值

Grails gorm 查询问题

Grails 日期绑定

日期验证的 Grails 最小约束