gpt4 book ai didi

java - 使用 spring 使用内部方法的注释验证数据

转载 作者:行者123 更新时间:2023-11-30 06:50:14 26 4
gpt4 key购买 nike

我是 Spring 新手,所以请耐心等待。但我想知道基于注释的验证是否也可以用于非表单方法?我知道 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>

如果您已经在配置中添加了 LocalValidatorFactoryBean bean,只需设置该 bean 的名称(您将需要它来进行依赖项注入(inject))。

现在您可以使用这个 bean 作为 validator :

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

关于java - 使用 spring 使用内部方法的注释验证数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42964076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com