我无法使用Spring MVC 4.2.5版本来处理hibernate validation 5.1.0.Final。
我的WebConfig:
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.setValidationMessageSource(messageSource());
return validator;
}
@Bean
@Autowired
public MethodValidationPostProcessor getValidationPostProcessor(LocalValidatorFactoryBean validator) {
MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
processor.setValidator(validator);
return processor;
}
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("i18n/messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setUseCodeAsDefaultMessage(true);
return messageSource;
}
@Override
public Validator getValidator() {
return validator();
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor(){
LocaleChangeInterceptor l = new LocaleChangeInterceptor();
l.setParamName("lang");
return l;
}
@Bean
public SessionLocaleResolver localeResolver(){
SessionLocaleResolver s = new SessionLocaleResolver();
s.setDefaultLocale(Locale.ENGLISH);
return s;
}
我有一个ExceptionHanlder,它获取验证消息,并将其作为JSON推回:
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
public ValidationError handleConstraintViolation(final ConstraintViolationException exception) {
ValidationError v = new ValidationError();
exception.getConstraintViolations().forEach(violation -> {
v.addError(violation.getPropertyPath().toString(), violation.getMessage());
});
logger.warn(exception, exception);
return v;
}
@Column(name = "VALUE_", nullable = false)
@Email(message = "{Email.contractorContactEmail.value}")
@NotNull(message = "{NotNull.contractorContactEmail.value}")
private String value;
在controller中,我使用@org.springframework.validation.annotation.validated。
PS2.我确信我的messageSource工作正常,因为如果我将这段代码添加到ExceptionHandler中,它可以很好地转换,但我知道这是一种糟糕的做法。
exception.getConstraintViolations().forEach(violation -> {
String messageTemplate = violation.getMessageTemplate();
if (messageTemplate.startsWith("{") && messageTemplate.endsWith("}")) {
String key = StringUtils.substring(messageTemplate, 1, messageTemplate.length() - 1);
v.addError(violation.getPropertyPath().toString(), messageSource.getMessage(key, null, LocaleContextHolder.getLocale()));
}
});
我马上可以告诉您的是,从您的配置来看,您的消息在错误的地方-您已经将消息源配置为查看i18/messages
,但是您的消息在类路径根中。因此,您的消息源定义应该如下所示:
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setUseCodeAsDefaultMessage(true);
return messageSource;
}
除此之外,其余的配置看起来还不错。我猜您使用的是WebMVCConfigurerAdapter
类?
编辑:供以后的读者参考,该问题与配置无关,JPA实体在@OneTomany
字段上缺少@valid
注释,因此控制器级验证无法获取它,Hibernate的JPA验证器使用默认消息。
我试图覆盖默认的Hibernate验证器消息,但没有成功。我已经为几个文本使用了一个资源包,它工作得很好。问题在于验证器的消息。 详细内容: 我创建了以下文件:ValidationMessages\u de.properties并将其放置在\src\main\resources\translations\ValidationMessages\u de.properties下。该文件具有以下资源:o
本文向大家介绍Spring4整合Hibernate5详细步骤,包括了Spring4整合Hibernate5详细步骤的使用技巧和注意事项,需要的朋友参考一下 Spring与Hiberante整合 通过hibernate的学习,我们知道,hibernate主要在hibernate.cfg.xml配置文件中 接下来我们看一下hibernate的一个配置文件 hibernate配置文件 hibernate
我试图理解spring中的验证消息和国际化机制,并编写了以下代码: Bean配置: 资源文件系统结构: 消息。属性: messages\u it。属性: 当我提交表单时,得到的错误消息是:{m1}。我是否缺少一些代码?
我试图让我的javascript验证电话号码输入,并在用户输入信息不正确时显示消息。我还设置了另外两个输入,所以我复制了其中一个,并用phoneNumber替换了名称,但没有结果。没有HTML的替代品,请它是我必须使用我的评估。 这里我只包含了电话号码输入的代码。http://jsfiddle.net/29ZNV/ 超文本标记语言 JAVASCRIPT
我有一个带有浮动字段和精度验证的模型。当验证失败但不起作用时,我想显示我自己的自定义错误消息。 根据Rails Gudes的说法,“:消息选项允许您指定验证失败时将添加到错误集合中的消息。当不使用此选项时,活动记录将为每个验证助手使用相应的默认错误消息。:消息选项接受字符串或程序。” 我完全按照这里的例子来做,但它不起作用。 我做错了什么? 这就是我到目前为止学到的。我在测试中将价格设置为空,现在
我有一个测试类,在那里我测试一个用@NotNull注释的域模型 在这个资源包中,支持相当多的语言(英语、德语、法语……) 例 @NOTNULL违反德语消息 当我在测试时,我如何强制Hibernate验证器为来自资源包的冲突消息选择特定的语言?现在,我收到英文违规信息。然而,在另一个机器德国。