Java 使用spring为内部方法验证带有注释的数据
我是一个春季新手,所以请容忍我。但我想知道基于注释的验证是否也可以用于非表单方法?我知道,Java 使用spring为内部方法验证带有注释的数据,java,spring,validation,annotations,Java,Spring,Validation,Annotations,我是一个春季新手,所以请容忍我。但我想知道基于注释的验证是否也可以用于非表单方法?我知道,BindingResult可以用于输入表单验证。但我有这样的想法: public class Service{ @NotBlank @Column private String name; } public class ServiceController{ @PostMapping public Service create() { ... some addi
BindingResult
可以用于输入表单验证。但我有这样的想法:
public class Service{
@NotBlank
@Column
private String name;
}
public class ServiceController{
@PostMapping
public Service create() {
... some additional code...
return createServiceObject();
}
private Service createServiceObject(){
...some additional code...
Service s = new Service();
/* I want Not Blank validation for name to get triggered here */
s.setName(someInputFromForm)
}
}
我希望名称根据注释@NotBlank进行验证,而不是像这样手动检查:
name.trim.isEmpty()
。这可能吗?如果尚未添加,请将LocalValidatorFactoryBean
类的新bean添加到配置中。如果您使用的是java配置,则类似于:
@Configuration
public class AppConfig {
...
@Bean
public LocalValidatorFactoryBean validatorFactoryBean(){
return new LocalValidatorFactoryBean();
}
}
或者,如果您使用的是xml配置,则:
<beans>
...
<bean id="validatorFactoryBean" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
</bean>
</beans>
请参考一些关于表单验证的教程。我正在尝试使用私有内部方法进行非表单验证。这就是问题的原因。有很多关于创建自定义的教程,可以使用自己的注释按字段进行验证,也可以将对象作为一个整体进行验证,例如,如果有int a,b;你可以检查a+b<10,等等。在Spring中,验证与序列化和提交表单两个方面相关。你可以使用组来告诉Spring字段何时应该有效。关于这方面有很多教程,你只需要看一下,google表单验证,序列化验证,自定义hibernate注释验证等。你会在那里找到答案,我不认为在上面问这些问题是好的,所以如果有太多新手问这些问题,那么网站就会堵塞。
public class ServiceController{
@Autowired
@Qualifier("validatorFactoryBean")
private LocalValidatorFactoryBean validatorFactoryBean;
@PostMapping
public Service create() {
... some additional code...
return createServiceObject();
}
private Service createServiceObject(){
Service service = new Service();
service.setName(someInputFromForm)
DataBinder binder = new DataBinder(service);
binder.addValidators(validatorFactoryBean);
binder.validate();
BindingResult result = binder.getBindingResult();
if(result.hasErrors()){
// here you can throw exception or do something else
}
return service;
}
}