2016-10-04 4 views
2

я добавил проверку (@javax.validation.Valid) на мой @RestController и в @RequestBody классе я использовал @NotEmpty аннотации:Пользовательские сообщения для SpringBoot RESTful проверки компонент не работает

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/основные/ресурсы/messages.properties с следующее содержание:

NotEmpty.invoice.commentText=Please type a comment 

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

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

Любая идея, где может возникнуть проблема?

+0

любые обновления по этой проблеме? – user2049132

ответ

0

Вместо @NotEmpty аннотация попробуйте использовать альтернативу от javax.validation упаковка: @NotNull и @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

+0

Я попробовал '@ javax.validation.constraints.NotNull' с' NotNull.unidentifiedInvoice.commentText = Введите комментарий' в 'messages.properties', но он по-прежнему возвращает значение по умолчанию' 'defaultMessage:" может не быть нулевым "' –

+0

Вы изменили имя класса на UnidentifiedInvoice? Если вы не пытаетесь использовать этот ключ: 'NotNull.invoice.commentText'. – eparvan

+0

Прости, да, я ... это, однако, не является основной причиной проблемы. –