无法在Java验证中读取插值

时间:2019-03-01 13:36:48

标签: java spring spring-boot spring-mvc javax.validation

在Spring MVC应用程序中,我正在使用JSR-303在控制器中使用@Validated对象。在我的Spring应用程序上下文中,我定义了一个自定义MessageSource,以从resources / messages.properties文件读取消息。

我能够读取和覆盖javax.validation默认消息(例如NotNull),但是如果尝试使用消息插值来读取参数(例如:{{1}中的min或max),则会收到错误消息

请注意,如果我直接在模型中设置一条消息,它将正确显示“插值”消息(默认消息也可以正常工作)。

模型类:

@Size(max=...)

messages.properties:

    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
    }

2 个答案:

答案 0 :(得分:0)

通过使用位置参数而不是命名参数解决了这一问题(不确定为什么它们不起作用)。

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

答案 1 :(得分:0)

如果您想对消息进行更多控制,例如。针对不同类别的不同消息,您可以尝试使用这种方法

    @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