【发布时间】:2013-02-11 17:17:33
【问题描述】:
我正在尝试将带注释的验证规则与一些自定义验证结合起来。我有一个如下所示的详细信息实体:
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 注释被忽略了。如何同时使用注释和自定义验证器?
【问题讨论】:
标签: java spring validation annotations