o.errors.allErrors.each {распечатывает это} по умолчанию при сбое сохранения объекта домена
-
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
}
Это добавляет метод с именем s(), который вызовет функцию save() и выведет все ошибки.
Другие советы
Это не самый чистый вид, и, вероятно, есть лучший , groovier способ сделать это. На основании здесь я собрал этот код, который вы могли бы расширить и использовать: р>
class Book {
void printTitle(){ println "The Title" }
}
Book.metaClass.customPrintTitle << {->
println "changin ur class"
printTitle()
}
def b = new Book()
b.customPrintTitle()