gpt4 book ai didi

java - 使用自定义 validator 时忽略 spring 验证注释

转载 作者:行者123 更新时间:2023-11-30 04:30:12 24 4
gpt4 key购买 nike

我正在尝试将带注释的验证规则与一些自定义验证结合起来。我有一个详细信息实体,如下所示:

public class DetailsEntity {    
@NotEmpty(message = "Name is required")
private String name;
private String customField;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getCustomField() {
return customField;
}

public void setCustomField(String customField) {
this.customField = customField;
}
}

然后我有一个如下所示的 Controller :

@Controller
public class EntityController {

@RequestMapping(value = "/create", method = RequestMethod.POST)
public @ResponseBody DetailsEntity create(@RequestBody @Valid
DetailsEntity details) {
//Do some creation work
}
}

这一切开箱即用,效果很好。问题是当我尝试将自定义 validator 与我的实体一起使用时。我的 validator 如下所示:

@Component
public class EntityValidator implements Validator {

@Override
public boolean supports(Class<?> aClass) {
return aClass.isAssignableFrom(DetailsEntity.class);
}

@Override
public void validate(Object o, Errors errors) {
DetailsEntity entity = (DetailsEntity) o;
if (entity.getCustomField().equals("Some bad value")) {
errors.reject("Bad custom value supplied");
}
}
}

我尝试通过两种方式注入(inject) validator 。一种是使用@InitBinder在 Controller 中,另一个是在 spring 配置中设置全局 validator ( <mvc:annotation-driven validator="entityValidator" /> )。无论我这样做,自定义 validator 都可以正常工作,但是我的 @NotEmpty注释被忽略。如何同时使用注释和自定义 validator ?

最佳答案

使用 SpringValidatorAdapter 作为自定义 validator 的基类并覆盖 validate() 方法:

public void validate(Object target, Errors errors) {
// check JSR-303 Constraints
super.validate(target, errors);
// Add you custom validation here.

}

或者在自定义 validator 中注入(inject) LocalValidationFactoryBean 并在自定义验证之前或之后调用 validate(target, error)。

关于java - 使用自定义 validator 时忽略 spring 验证注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817281/

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