gpt4 book ai didi

java - Spring Custom Validator - 使用参数插入消息

转载 作者:行者123 更新时间:2023-11-30 10:07:29 26 4
gpt4 key购买 nike

我创建了一个自定义 ConstraintValidator,其中 isValid 方法如下所示:

private String message;

@Override
public void initialize(InputValidator constraintAnnotation) {
this.message = constraintAnnotation.message();
}

@Override
public boolean isValid(String inputValue, ConstraintValidatorContext context) {
HibernateConstraintValidatorContext h = context.unwrap(HibernateConstraintValidatorContext.class);
h.disableDefaultConstraintViolation();

//logic goes here

if(!valid) {
h.addExpressionVariable("0", inputValue);
h.buildConstraintViolationWithTemplate(this.message)
.addConstraintViolation();
}
return valid;
}

我在 messages.properties 中也有以下内容:

error.input=The value {0} is invalid.

当在 thymeleaf 中和 MessageSource bean 中使用它时,我可以使用上面的消息并替换 {0} 值,但是 HibernateConstraintValidatorContext 不会替换该值.

鉴于我的项目的限制,我无法更改消息格式,例如将其更改为 The value ${0} is invalid.

我目前的应用程序显示响应“值 userInput 无效”。其中“userInput”是表单/对象中字段的名称。

最佳答案

所以 {0} 是一个消息参数,而 ${0} 是一个表达式变量。

您必须使用 #addMessageParameter() 而不是 #addExpressionVariable()。它是在 Hibernate Validator 5.4.1 中引入的,但如果您使用旧版本,则无论如何都应该升级。

关于java - Spring Custom Validator - 使用参数插入消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54231804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com