抽象コントローラーに次の関数があります
public abstract class GenericController<T extends PersistentObject> {
...
...
...
@RequestMapping(value = "/validation.json", method = RequestMethod.POST)
@ResponseBody
public ValidationResponse ajaxValidation(@Valid T t, BindingResult result) {
ValidationResponse res = new ValidationResponse();
if (!result.hasErrors()) {
res.setStatus("SUCCESS");
} else {
res.setStatus("FAIL");
List<FieldError> allErrors = result.getFieldErrors();
List<ErrorMessage> errorMesages = new ArrayList<ErrorMessage>();
for (FieldError objectError : allErrors) {
errorMesages.add(new ErrorMessage(objectError.getField(),
objectError.getDefaultMessage()));
}
res.setErrorMessageList(errorMesages);
}
return res;
}
ほとんどの場合、検証はさまざまな種類のエンティティに対して十分です。今、具体的なコントローラーの検証を次のようにカスタマイズしたいと思います
@Controller
@RequestMapping("user")
public class UserController extends GenericController<User> {
@RequestMapping(value = "/validation.json", method = RequestMethod.POST)
@ResponseBody
public ValidationResponse ajaxValidation(@Valid User user,
BindingResult result, Locale locale) {
ValidationResponse res = super.ajaxValidation(user, result);
if (!user.getPassword().equals(user.getConfirmPassword())) {
res.setStatus("FAIL");
res.getErrorMessageList().add(
new ErrorMessage("confirmPassword", messageSource
.getMessage("password.mismatch", null, locale)));
}
return res;
}
}
これにより、次のエラーが発生しますjava.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'userController' bean method
。この問題を解決するにはどうすればよいですか? より良いアプローチはありますか?