日期字段的Grails数据绑定失败

时间:2014-11-10 14:22:42

标签: json grails data-binding request

我想将域类与嵌套域对象绑定到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']

2 个答案:

答案 0 :(得分: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

我希望有所帮助。

答案 1 :(得分:0)

我认为这里存在两个问题:

  1. 您的JSON应该在引号中包含日期值(即expiryDate:" 2016-07-21")。如果没有引号,它可能只绑定起始数字部分(2016),这不是您配置的格式之一。
  2. 似乎有一个Grails错误(我们在2.5.0上),在嵌套域类中有绑定日期(这就是我在这里的原因)。如果你正确绑定它(意思是,日期的格式与grails.databinding.dateFormats中定义的格式匹配),则日期属性设置正确。但是,如果存在不匹配(意思是,值为" 2016"但配置为' yyyy-MM-dd',则会在没有验证错误的情况下静默丢弃错误值我已经在嵌入式嵌套类和belongsTo关系中看到了这种行为,我认为这就是为什么你的expiryDate保持为空。