o.errors.allErrors.each {println it} per impostazione predefinita quando non si riesce a salvare un oggetto dominio
-
03-07-2019 - |
Domanda
Quando persisto oggetti di dominio usando Grails / GORM, mi trovo spesso a chiedermi perché una chiamata save () fallisca.
Questo può essere facilmente risolto aggiungendo la logica:
if (!o.save()) {
o.errors.allErrors.each { println it }
}
Tuttavia, aggiungendo questo ovunque faccio un .save () aggiunge un sacco di codice duplicato. Nello spirito di DRY vorrei configurare Grails / GORM per stampare automaticamente eventuali errori di salvataggio sulla console (stderr). È possibile? In caso contrario, come posso estendere GORM per renderlo possibile?
Soluzione
Soluzione:
Object.metaClass.s = {
def o = delegate.save()
if (!o) {
delegate.errors.allErrors.each {
println it
}
}
o
}
Questo aggiunge un metodo chiamato s () che chiamerà save () e stamperà eventuali errori.
Altri suggerimenti
Questo non è l'aspetto più pulito e probabilmente esiste un modo migliore , groovier per farlo. Basandomi sulla ricerca qui ho messo insieme questo codice che potrebbe essere qualcosa che potresti espandere e usare:
class Book {
void printTitle(){ println "The Title" }
}
Book.metaClass.customPrintTitle << {->
println "changin ur class"
printTitle()
}
def b = new Book()
b.customPrintTitle()