Не могу прочитать интерполированные значения в проверке Java - PullRequest
0 голосов
/ 01 марта 2019

В моем приложении Spring MVC я использую @Validated объекты в моих контроллерах, используя JSR-303.В моем контексте приложения Spring я определил собственный MessageSource для чтения сообщений из файла resources / messages.properties.

Я могу читать и переопределять сообщения по умолчанию javax.validation (например, NotNull), ноЯ получаю сообщение об ошибке, если пытаюсь использовать интерполяцию сообщений для чтения параметра (например, min или max из @Size(max=...).

. Обратите внимание, что если я устанавливаю сообщение непосредственно в моей модели, оно правильно отображает «интерполированный»"message (сообщение по умолчанию тоже работает нормально).

Класс модели:

    public class Customer {

            @JsonProperty("name")
            @NotNull
            @Size(max = 50) // if I add message = "This field must be less than {max} characters long" it works!
            private String name;

            // Other fields here + getters and setters
    }

messages.properties:

Size=This field must be less than {max} characters long
NotNull=This field must be set.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Если вы хотите больше контролировать сообщения, напр.разные сообщения для разных классов, вы можете попробовать с этим подходом

    @NotBlank(message = "{product.name.blank}")
    @Size(min = 2, message = "{product.name.minsize}")
    @ApiModelProperty(value = "Product Name", required = true, example = "Jabuke", position = 0)
    private String name;

Вы храните сообщения в ValidationMessages.properties вместо application.properties.Он автоматически загружается в контекст.

product.name.blank=Product name can not be blank
product.name.minsize=Product name must be 2 characters or more
0 голосов
/ 01 марта 2019

Решено с использованием позиционных параметров вместо именованных (хотя я не уверен, почему они не работают).

Size=This field must be less than {1} characters long
...