我想將註釋的驗證規則與一些自定義驗證一起使用。我有一個細節實體,如下所示:使用自定義驗證程序時彈出驗證註釋被忽略
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
,另一種是在彈簧配置中設置全局驗證器(<mvc:annotation-driven validator="entityValidator" />
)。無論哪種方式,我這樣做,自定義驗證工作正常,但我的@NotEmpty
註釋被忽略。我如何使用註釋以及自定義驗證器?
這讓我走下正確的道路,最終看着這個頁面:http://nonrepeatable.blogspot.com/2010/04/using-jsr-303-with-classic-spring.html – 2013-02-11 19:40:20
我會補充說如果想要使用組驗證,則組必須添加到驗證方法中。否則,這些驗證不會執行! – jarandaf 2013-07-08 10:13:30