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;
    }
}