我正在尝试将带注释的验证规则与一些自定义验证结合起来。我有一个详细信息实体,如下所示:
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
public class EntityController {
@RequestMapping(value = "/create", method = RequestMethod.POST)
public @ResponseBody DetailsEntity create(@RequestBody @Valid
DetailsEntity details) {
//Do some creation work
}
}
这一切开箱即用。问题是当我尝试将自定义验证器与我的实体一起使用时。我的验证器如下所示:
@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");
}
}
}
我试过两种方式注入我的验证器。一种是@InitBinder
在控制器中使用 ,另一种是在 spring 配置中设置全局验证器(<mvc:annotation-driven validator="entityValidator" />
)。无论哪种方式,自定义验证器都可以正常工作,但是我的@NotEmpty
注释被忽略了。如何同时使用注释和自定义验证器?