Имам 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