У меня есть сервер Spring Boot REST, который должен возвращать определенные коды ошибок при вводе неверных данных. Мне здесь не нужны никакие i18n, достаточно простых английских кодов ошибок, таких как «отсутствует».
Используя Spring Boot с Hibernate Validator, после проверки я получаю обратный объект Spring Errors
.
Для каждой ошибки я могу получить code
и defaultMessage
. Для ограничения @NotBlank это вернет NotBlank
и may not be null
соответственно.
По сути, я хочу перевести эту ошибку только на missing
, так как меня не интересует перевод i18n. Также другие ограничения Я хочу, чтобы коды ошибок REST были более дружественными.
Я хотел использовать простой messages.properties
или ValidationMessages.properties
внутри src/main/resources
, но, к сожалению, это не сработает. Примечание. Я пытался добавить как общие свойства NotBlank=missing
, так и определенные свойства NotBlank.entity.field=missing
.
Я не уверен, почему это не работает ... может быть, потому, что разрешение сообщений i18n (в мире jsp) идет не напрямую через Spring Errors
, а через реализацию MessageCodesResolver
(просто догадываюсь).
Вероятно, я мог бы получить код ошибки из Spring Error
и выполнить поиск в преобразователе кода сообщения. Но мне интересно, почему error.getDefaultMessage
не возвращает соответствующее значение из ValidationMessages.properties
.
Любое предложение приветствуется.
error.getDefaultMessage
получает сообщение по умолчанию, и это сообщение, сгенерированное кодом, а не файлами свойств. Если вы посмотрите на файлMessageSource.getMessage
вы видите, что передаетсяdefaultMessage
. Тот же механизм используется при использовании проверки. - person M. Deinum   schedule 31.12.2014MessageSource
ошибки, возвращенные из объектаErrors
, являются экземплярамиMessageSourceResolvable
. Так что просто переберите ошибки, передайте ихMessageSource
и получите нужное сообщение отmessages.properties
. Возможно, вы могли бы облагородить эту логику и поместить ее в класс, который генерирует объект ответа. - person M. Deinum   schedule 31.12.2014