#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
помощью inmessages.properties
, но он по-прежнему возвращает значение по умолчанию"defaultMessage": "may not be null"
2. Вы изменили имя класса на UnidentifiedInvoice? Если нет, попробуйте использовать этот ключ:
NotNull.invoice.commentText
.3. Извините, да, я это сделал… однако это не основная причина проблемы.