注釈付きの検証ルールをいくつかのカスタム検証と一緒に取り入れようとしています。次のような詳細エンティティがあります。
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");
}
}
}
バリデーターを2つの方法で注入してみました。1つはコントローラーでを使用し、もう1つは@InitBinder
スプリング構成でグローバルバリデーターを設定します(<mvc:annotation-driven validator="entityValidator" />
)。どちらの方法でも、カスタムバリデーターは正常に機能しますが、@NotEmpty
注釈は無視されます。アノテーションとカスタムバリデーターの両方を使用するにはどうすればよいですか?