/ / Viazanie údajov údajov o grile zlyhalo pre dátové pole - json, grails, data-binding, request

Zaznamenávanie údajov o gradách zlyhalo pre pole dátumu - json, graily, väzba údajov, požiadavka

Chcem zviazať triedu domén s vnorenými doménovými objektmi a požiadať o údaje. Funguje to dobre, s výnimkou poľa typu Date v vnorenej doménovej triede, ktorú vždy dáva null. Tu je request.json

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

Tieto json som sa pokúsil zviazať viacerými spôsobmi:

 MyClass myClass=new MyClass(request.JSON)

a

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

Nič nespracovalo na záväznú dobu platnosti. Je to chyba alebo niečo, čo robím?

UPDATE:

Používam Grails 2.4.2. Mám tiež tento riadok zahrnutý do môjho konfiguračného súboru

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

odpovede:

1 pre odpoveď č. 1

Neposkytli ste dostatok informácií na to, aby ste to vedeli, ale očakávam, že spojivo nie je nakonfigurované na informácie o vašom formáte dátumu. Môžete skúsiť niečo také:

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

Môžete ho tiež nakonfigurovať ako predvolený formát dátumu v 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""]

vidieť http://grails.org/doc/latest/guide/theWebLayer.html#dataBinding pre viac detailov.

Dúfam, že to pomôže.


0 pre odpoveď č. 2

Myslím, že tu existujú dva problémy:

  1. Váš JSON by mal mať v dátumoch uvedenú hodnotu dátumu (i.e. Dátum vypršania platnosti: „2016-07-21“). Bez úvodzoviek pravdepodobne ide iba o úvodnú číselnú časť (2016), ktorá nie je jedným z vašich nakonfigurovaných formátov.
  2. Zdá sa, že došlo k chybe Grails (sme opäť na 2.5.0) so záväznými dátumami v triedach vnorených domén (čo je dôvod, prečo som tu). Ak ho správne zviažete (čo znamená, že formát dátumu sa zhoduje s formátom definovaným v grails.databinding.dateFormats), atribút dátumu je nastavený v poriadku , Ak však existuje „nesúlad (znamená to, že hodnota je„ 2016 “), ale konfigurácia je„ rrrr-MM-dd “, zlá hodnota sa bezobslužne zahodí bez chyby overenia. Toto správanie som videl s oboma vloženými vnorenými triedami. a vo vzťahu patriacom a myslím si, že preto váš dátum ukončenia platnosti zostáva neplatný.