#rest #grails #grails-controller
#rest #grails #grails-контроллер
Вопрос:
Как нам настроить ответ на ошибку grails RestfulController? Например, один из моих контроллеров restful возвращает следующий ответ по умолчанию при ошибке при попытке сохранить объект.
{
"errors":
[
{
"object": "com.test.Task",
"field": "description",
"rejected-value": null,
"message": "Property [description] of class [class com.test.Task] cannot be null"
}
]
}
Я хотел бы настроить ответ следующим образом.
{
"errors" :
{
"message": "Property [description] of class [class com.test.Task] cannot be"
},
{
"message": "This is going to be any 2nd message"
},
.....
}
Ответ №1:
Я нашел решение
Все, что вам нужно, это зарегистрировать маршалеры пользовательских объектов в org.grails.datastore.mapping.validation.ValidationErrors
классе
def messageSource //inject messageSource
JSON.registerObjectMarshaller(ValidationErrors) { validationErrors ->
def errors = [] //add all errors into this list
validationErrors.target.errors.allErrors.each { error ->
errors.add(messageSource.getMessage(error, null)) //get messages from properties file.
}
//return map with errors list
return ["errors":errors]
}
Ответ будет:
{
"errors": [
"Property [description] of class [class com.test.Task] cannot be",
"This is going to be any 2nd message"
]
}
Ответ №2:
Используйте Internationalization
описанную здесь функцию. Добавьте следующее в свой пакет ресурсов messages.properties
.
task.description.nullable = your message
или
com.test.Task.description.nullable = your message