Пользовательские сообщения для проверки SpringBoot RESTful bean не работают

#java #spring #spring-boot #bean-validation

#java #весна #весенняя загрузка #проверка компонента

Вопрос:

Я добавил validation ( @javax.validation.Valid ) в свой @RestController и в @RequestBody класс, который я использовал @NotEmpty аннотацию:

 public class Invoice {

    @NotEmpty
    private String commentText;

    // omitted
}
  

Когда вызывается вызов REST с отсутствующим commentText , клиенту возвращается соответствующая ошибка:

 {
   "timestamp": 1475599494823,
   "status": 400,
   "error": "Bad Request",
   "exception": "org.springframework.web.bind.MethodArgumentNotValidException",
   "errors": [   {
      "codes":       [
         "NotEmpty.invoice.commentText",
         "NotEmpty.commentText",
         "NotEmpty.java.lang.String",
         "NotEmpty"
      ],
      "arguments": [      {
         "codes":          [
            "invoice.commentText",
            "commentText"
         ],
         "defaultMessage": "commentText",
         "code": "commentText"
      }],
      "defaultMessage": "may not be empty",
      "objectName": "invoice",
      "field": "commentText",
      "bindingFailure": false,
      "code": "NotEmpty"
   }],
   "message": "Validation failed for object='invoice'. Error count: 1",
   "path": "/api/invoices/1"
}
  

Затем я создал src/main/resources/messages.properties со следующим содержимым:

 NotEmpty.invoice.commentText=Please type a comment
  

Проблема в том, что вместо пользовательского «Пожалуйста, введите комментарий» клиенту возвращается исходное сообщение об ошибке.

Я использую SpringBoot 1.4 с конфигурацией YAML и запускаю приложение в Eclipse.

Есть идеи, в чем может быть проблема?

Комментарии:

1. какие-либо обновления по этой проблеме?

Ответ №1:

Вместо @NotEmpty аннотации попробуйте использовать альтернативу из javax.validation package: @NotNull and @Size(min=1) . Также вы можете найти этот пример проекта полезным для вас: https://github.com/MichaelKnight/ValidandoFormularios

Если по какой-то причине вам нужно использовать аннотации @NotEmpty, вам следует создать файл ValidationMessages.properties и поместить его в свой путь к классу.

Чтобы избежать проблем с переводом ключа, вы можете указать ключ сообщения следующим образом: @NotEmpty(message="{NotEmpty.invoice.commentText}") . Или посмотрите здесь: http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html/validator-usingvalidator.html#section-message-interpolation

Комментарии:

1. Я пробовал @javax.validation.constraints.NotNull с NotNull.unidentifiedInvoice.commentText=Please type a comment помощью in messages.properties , но он по-прежнему возвращает значение по умолчанию "defaultMessage": "may not be null"

2. Вы изменили имя класса на UnidentifiedInvoice? Если нет, попробуйте использовать этот ключ: NotNull.invoice.commentText .

3. Извините, да, я это сделал… однако это не основная причина проблемы.