как настроить ответ на ошибку контроллера grails restful

#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