我的应用程序是完全配置的带有thymeleaf模板引擎的spring boot应用程序。I18n也进行了配置,以便我可以在模板中使用它。下面是我使用的配置:
spring.messages.basename=i18n/messages
虽然手动验证字段I18n也可以正常工作:
BindingResult result;
result.rejectValue("field", "some.i18n.code");
但是一旦我想实现一些自定义ConstraintValidator
对象并使用消息
字段-不涉及I18n,我就会收到纯代码作为响应而不是消息。即。
{some.i18n.code}
我尝试了这个解决方案——没有结果。这也是同样的结果。
我错过了什么?
另一种解决方案是在您的任何@配置
类中声明此bean:
@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean(MessageSource messageSource) {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource);
return bean;
}
由于声明了这一点,现在我的自定义验证器中的自定义错误代码正在我的<code>消息中搜索。properties(通过声明spring.messages.basename=i18n/messages
,我在i18n
子目录中也有)。
验证程序代码示例:
public class ContestValidator implements ConstraintValidator<ValidContest, CreateContestParameters> {
@Override
public void initialize(ValidContest constraintAnnotation) {
}
@Override
public boolean isValid(CreateContestParameters contestParameters, ConstraintValidatorContext context) {
boolean result = true;
if (!endDateIsEqualOrAfterStartDate(contestParameters)) {
context.buildConstraintViolationWithTemplate("{Contest.endDate.invalid}")
.addPropertyNode("endDate").addConstraintViolation();
result = false;
}
if (!registrationDeadlineIsBeforeStartDate(contestParameters)) {
context.buildConstraintViolationWithTemplate("{Contest.registrationDeadline.invalid}")
.addPropertyNode("registrationDeadline").addConstraintViolation();
}
return result;
}
}
我想我找到了解决办法,也许对别人会有帮助。您只需将以下定义添加到< code > WebMvcConfigurerAdapter 配置实现中:
@Autowired
private MessageSource messageSource;
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
validatorFactoryBean.setValidationMessageSource(messageSource);
return validatorFactoryBean;
}
@Override
public Validator getValidator() {
return validator();
}
在添加Spring特定的配置之前,没有进行任何验证,但也没有任何错误。可能根本没有尝试验证。 现在我已经添加了必要的@Validated类注释和bean定义: 我得到以下错误:
我的bean中有两个字段 当字段key=“A”,“value”应该跟在其他“key”的特定Regex后面时,它可以是任何内容。 如何根据键定义此值验证。
问题内容: Hibernate Validator 4.x中是否有跨域验证的实现(或第三方实现)?如果没有,实现跨域验证器的最干净方法是什么? 例如,如何使用API来验证两个bean属性是否相等(例如,验证密码字段与密码验证字段匹配)。 在注解中,我期望这样的东西: 问题答案: 每个字段约束都应由不同的验证者注释处理,换句话说,不建议对一个字段进行其他字段的验证注释检查。跨领域验证应在课程级别
我按照文档(http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/validation.html)中给出的内容配置了JSR-303自定义验证器,在类路径上使用LocalValidatorFactoryBean和Hibernate验证器完成。但是,我的验证器只是拒绝启动。我在这里(https://github.
我提出了一个使用JSR303组进行条件验证的概念。“有条件地”意味着我有一些字段,这些字段只有在另一个字段具有特定值时才相关。 示例:有一个选项可以选择是以个人身份注册还是以公司身份注册。选择公司时,用户必须填写包含公司名称的字段。 但是Spring由于数据绑定而打破了这个想法。在验证开始之前,Spring将数据绑定到RegisterForm。例如,如果类型不兼容(应为int值,但用户用字母填充表
我正在用Spring和Thymeleaf填表: MyForm如下所示: 正如您所看到的,我做了一个自定义注释,它应该检查输入值是否可以解析为: 现在在我的Controller类中,我正在执行以下操作: 但是,当试图将放入文本字段以测试验证时,获取: 下面是我读到的示例,并希望用自定义验证器进行扩展:http://viralpatel.net/blogs/spring-mvc-hashmap-for