【问题标题】:Grails Data Binding Failed for Date Field日期字段的 Grails 数据绑定失败
【发布时间】:2014-11-10 14:22:42
【问题描述】:

我想将域类与嵌套域对象绑定到 request.JSON 数据。它工作正常,除了嵌套域类中的 Date 类型的字段,它总是给出 null。这里是 request.json

[..., cardInfo:[expiryDate:2016-07-21, ccv:3455, cardNumber:4111111111111111], ....]

我尝试使用多种方式绑定这些 json:

 MyClass myClass=new MyClass(request.JSON)

myClass.properties=request.JSON    
bindData(myClass,request.JSON)
bindData(myClass.cardInfo,request.JSON.cardInfo)

绑定 expiryDate 没有任何效果。这是一个错误还是我做错了什么?

更新:

我正在使用 Grails 2.4.2 。我的配置文件中也包含了这一行

grails.databinding.dateFormats = ['dd-MM-yyyy','MM-dd-yyyy','yyyy-MM-dd', 'yyyy-MM-dd HH:mm:ss.S']

【问题讨论】:

  • 你得到了什么异常?
  • 绑定后检查myClass.errors。这可能表明出了什么问题。
  • 没有例外。没有错误,这是来自日志 Binding Errors==>>grails.validation.ValidationErrors: 0 errors
  • 您好,我正在使用 grails 2.4。而且我遇到以下错误:-org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法将具有类'java.lang.String'的对象'1969-11-15T18:25:43.511Z'转换为类'java.util .日期'

标签: json grails data-binding request


【解决方案1】:

您没有提供足够的信息来确定,但我希望活页夹未配置为了解您的日期格式。你可以试试这样:

class MyClass {
    @org.grails.databinding.BindingFormat('yyyy-MM-dd')
    Date expiryDate
}

您还可以在 Config.groovy 中将其配置为默认日期格式:

// grails-app/conf/Config.groovy
grails.databinding.dateFormats = ['yyyy-MM-dd', 'MMddyyyy', 'yyyy-MM-dd HH:mm:ss.S', "yyyy-MM-dd'T'hh:mm:ss'Z'"]

更多详情请见http://grails.org/doc/latest/guide/theWebLayer.html#dataBinding

希望对你有帮助。

【讨论】:

  • 您没有指明您使用的是哪个版本的 Grails。我应该提到我上面提到的BindingFormat 注释是在 Grails 2.3 中与当时新的数据绑定器一起引入的。如果您使用的是旧版本,可能会发生同样的问题,但解决方案会有所不同。
  • 我正在使用 Grails 2.4.2。我之前尝试过你的第二个建议,但这对我不起作用。好像第二个也没用
  • 您好,我正在使用 grails 2.4。而且我遇到以下错误:-org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法将具有类'java.lang.String'的对象'1969-11-15T18:25:43.511Z'转换为类'java.util .日期'
【解决方案2】:

我认为这里有两个问题:

  1. 您的 JSON 应包含引号中的日期值(即 expiryDate: "2016-07-21")。如果没有引号,它可能只绑定开头的数字部分 (2016),这不是您配置的格式之一。
  2. 似乎有一个 Grails 错误(我们在 2.5.0 上)在嵌套域类中具有绑定日期(这就是我在这里的原因)。如果您正确绑定它(意思是,日期的格式与 grails.databinding.dateFormats 中定义的格式匹配),则 date 属性设置得很好。但是,如果存在不匹配(即值为“2016”但配置为“yyyy-MM-dd”,则错误值将被静默丢弃而不会出现验证错误。我在嵌入式嵌套类和在 belongsTo 关系中,我认为这就是为什么您的 expiryDate 仍然为空。

【讨论】:

  • 您好,我使用的是 grails 2.4。而且我遇到以下错误:-org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法将具有类'java.lang.String'的对象'1969-11-15T18:25:43.511Z'转换为类'java.util .日期'
猜你喜欢
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多