o.errors.allErrors.each {println it}ドメインオブジェクトの保存に失敗した場合のデフォルト
-
03-07-2019 - |
質問
Grails / GORMを使用してドメインオブジェクトを永続化するとき、save()呼び出しが失敗する理由がよくわからないことがよくあります。
これはロジックを追加することで簡単に解決できます:
if (!o.save()) {
o.errors.allErrors.each { println it }
}
ただし、.save()を行うすべての場所にこれを追加すると、多くの重複コードが追加されます。 DRYの精神で、Grails / GORMを設定して、保存エラーを自動的にコンソール(stderr)に出力したいと思います。それは可能ですか?そうでない場合、GORMを拡張してそれを可能にするにはどうすればよいですか?
解決
解決策:
Object.metaClass.s = {
def o = delegate.save()
if (!o) {
delegate.errors.allErrors.each {
println it
}
}
o
}
これにより、save()を呼び出してエラーを出力するs()というメソッドが追加されます。
他のヒント
これは見た目がきれいではありません。おそらく、これを行うにはより良い、 groovier の方法があります。 こちらに基づいて、拡張して使用できるコードをまとめました。
class Book {
void printTitle(){ println "The Title" }
}
Book.metaClass.customPrintTitle << {->
println "changin ur class"
printTitle()
}
def b = new Book()
b.customPrintTitle()
所属していません StackOverflow