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ď č. 1Neposkytli 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:
- 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.
- 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ý.