Код ошибки Grails

Я пытаюсь определить код ошибки из исключения, которое возникает при взаимодействии с объектом домена в Grails.

У меня есть база данных с некоторыми проверками полей, и одна из проверок заключается в том, что конкретный столбец должен быть уникальным. Согласно документам, он выдаст код ошибки className.propertyName.unique(http://grails.org/doc/latest/ref/Constraints/unique.html). Когда я оборачиваю свой контроллер в блок try catch, например. Я могу поймать все виды исключений проверки:

catch (grails.validation.ValidationException e) {  
    exception handling code here  
}    

Как получить доступ к коду ошибки? Я хотел бы сделать что-то вроде If the Error Code = className1.propertyName2.unique, а затем ответить propertyName2 is not unique.

У меня есть «failOnError: true», установленный в качестве параметра, когда я выполняю операцию сохранения.

Спасибо!


person Alex Sneed Miller    schedule 08.01.2015    source источник
comment
просто добавьте className1.propertyName2.unique=propertyName2 is not unique в файл messages.properties и Grails у вас работает не нужно ловить.   -  person MKB    schedule 08.01.2015
comment
У меня нет времени, чтобы вдаваться во все подробности и дать вам отличный ответ прямо сейчас, однако, краткий и грязный ответ заключается в том, что когда вы пытаетесь сохранить domain object, и это не удается, он будет делать это тихо, но вы ДОЛЖНЫ иметь в нем что-то под названием errors, которое выдаст вам ошибки. Это будет выглядеть так: def domainObject = new DomainObject(params) if(!domainObject.save()){ domainObject.each{ print(it) } } Опять же, это быстро, грязно и неполно, но должно дать вам то, что вы нужно.   -  person Ted Delezene    schedule 08.01.2015
comment
e.getErrors().getFieldError() — это массив из 20 ошибок, и одним из элементов массива является код ошибки из документации. Должен ли я просто проверять этот массив каждый раз, существует ли там этот код ошибки? --- @user1690588 У меня это установлено в файле messages.properties. Даже когда я проверяю массив и распечатываю его, он не меняет его с lassName1.propertyName2.unique на propertyName2 is not unique --- TedDelezene, я установил его потерпеть неудачу, если это не сработало. Знаете ли вы, есть ли способ сделать это с исключением?   -  person Alex Sneed Miller    schedule 08.01.2015
comment
У вас все еще может быть список ошибок в исходном объекте домена после того, как вы поймаете исключение, поэтому вы должны иметь возможность обрабатывать ошибки внутри таким же образом domainObject.errors.each{ render it } или что вы хотите с ним делать... или вы можете создать свое собственное исключение при ошибке, используя тот же метод, я обычно не обрабатываю это таким образом. Обычно, если объект не сохраняется должным образом, я визуализирую определенный шаблон, который перечисляет ошибки из объекта домена, который я передаю ему с помощью eachError tag ( grails.org/doc/latest/ref/Tags/eachError.html )   -  person Ted Delezene    schedule 09.01.2015
comment
Спасибо за вашу помощь, в итоге я сделал это (см. пост ниже)   -  person Alex Sneed Miller    schedule 09.01.2015


Ответы (1)


Код ошибки скрыт глубоко внутри объекта. Это будет один из элементов списка, возвращаемый вызовом следующего кода, где «e» — объект исключения.

e.getErrors().getFieldError()

Вы также можете получить только код (в данном случае «уникальный») из исключения, вызвав следующее:

e.getErrors().getFieldError().getCode()
person Alex Sneed Miller    schedule 09.01.2015