我正在尝试编写一个自定义bean验证器,并根据用户界面上的语言环境显示验证消息。
为此,我创建了一个验证器,如下所示:
@Component
public class MyCustomValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return MyClass.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
MyClass myObject = (MyClass)target;
if (StringUtils.isBlank(myObject.getName())) {
errors.rejectValue("name", "{myproject.myclass.validation.name});
}
}
}
我还注册了messageSource和validator bean:
@Configuration
@ComponentScan(basePackages = "com.mycompany.myproject")
public class MyProjectWebMvcConfig {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.addBasenames("locale/myproject");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.setValidationMessageSource(this.messageSource());
return validator;
}
}
在我的控制器中,我使用initBinder注册我的验证器:
@RestController
@RequestMapping("/api/mytype")
public class MyController extends MyBaseController {
@Autowired
private MyCustomValidator myCustomValidator;
@InitBinder
protected void initBinder(WebDataBinder binder) {
super.initBinder(binder);
binder.addValidators(this.myCustomValidator);
}
@PostMapping(value = "/")
public ResponseEntity<OperationResult<Void>> save(@Valid @RequestBody MyClass myObject, BindingResult bindingResult, HttpServletRequest request) {
if (!bindingResult.hasErrors()) {
...
}
...
}
}
public class MyBaseController {
@Autowired
protected Validator validator;
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(validator);
}
}
不过,验证错误消息在用户界面上显示为{myproject.myclass.validation.name}。即使我设置了LocalValidatorFactoryBean的验证消息源,似乎也不会从messageSource读取消息。
另一方面,如果我使用@NotNull(消息={myproject.myclass.validation.name})
注释而不是使用自定义验证器,则验证错误消息会正确显示。
不知道我错过了什么。
检查messageSource文件的编码。它应该是utf-8。
试试这个
errors.rejectValue("name", "myproject.myclass.validation.name");
5.2 使用Spring的验证器接口进行验证 {#toc_2} Spring具有一个Validator接口可以让你用于验证对象。Validator接口在工作时需要使用一个Errors对象,以便于在验证过程中,验证器可以将验证失败的信息报告给这个Errors对象。 让我们考虑一个小的数据对象: public class Person { private String name; p
我试图使用注释和ConstraintValidator接口创建自定义bean验证。目的是使模型的名称独一无二。我不知道为什么,但是当我提交表单以便添加产品时,会抛出NullPointerException。 我的root-context.xml文件:
首先,我是Vaadin7的新手。当我发现BeanFieldGroup.class时,我正在尝试一些vaadin演示。正如我所看到的,这个类将一个字段绑定到一个bean属性。在bean中,使用验证约束注释对属性进行注释(JSR303)。在本例中,我的pom.xml包含hibernate验证器依赖项: 我创建了validationmessage.properties文件,并在其中放了一些消息(带有匈牙
任何进入CustomValidator实现的bean都始终为空。我使用的是Spring Boot 2,应用程序是REST API,我没有使用MVC。 我已经尝试了所有我读到的关于这件事的东西,但到目前为止运气都不好。 例如,这里的这个话题对我来说并不适用 否则我应该验证吗?,我已经坚持了2天了。 这是我的配置类: 我的CustomValidator如下所示: JPA实体: 注释:
我试图用Hibernate Validation 6.0.1定义约束定义,其中验证器位于相对于约束注释的不同位置(.jar/项目)。Aka,我有我想要验证的对象,它们位于带有注释定义的项目“api”中,但我将在项目“modules/common”中有验证器 我遵循文档中的描述。 配置文件 约束注释 验证器 我的问题我的问题是,如果我没有将“@约束(validatedby={})”放在注释中,我会得
那里是自定义验证器: 当我调用时,我在插入的的上得到了一个。 我假设Spring会正确地注入定制验证器,我必须告诉他。但是,我不知道怎么做。我已经尝试了一些通过堆栈溢出和谷歌找到的东西,但没有运气。 任何帮助都将不胜感激。