我想确认一些信息,所以我加了验证,并在POST方法的参数使用@Valid:春天验证从来没有所谓的
@Controller
@RequestMapping("/user.htm")
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping(method = RequestMethod.GET)
public String userInfo(Model model) {
....
return "user";
}
@RequestMapping(method = RequestMethod.POST)
public String userInfoResult(@Valid @ModelAttribute UserForm userForm, BindingResult result, Model model) {
UserInfo stat = userService.getStatitisque(userForm.getSearchCritera());
userForm.setListeExpediteur(listeExpediteur);
userForm.setUserInfo(stat);
model.addAttribute("userForm", userForm);
}
}
public class UserFormValidator implements Validator {
@Override
public boolean supports(Class<?> type) {
return UserForm.class.equals(type);
}
@Override
public void validate(Object o, Errors errors) {
UserForm userForm = (User) o;
...
}
}
当我调试,我从来没有在UserFormValidator类。
我是否需要在这些文件中添加内容?
web.xml
applicationContext.xml
dispatcher-servlet.xml
我感到如此奇怪的是,春季需要您手动每个校验器类的添加到您的每个控制器时,它会自动执行几乎一切。这种特殊的API选择有什么理由吗? – LordOfThePigs 2014-09-01 21:06:39
@LordOfThePigs你不必手动添加它 - 你可以写一些类似“ValidatorAdvice”的服务,它将使用''ControllerAdvice''注释。它会将您的验证器添加到每个控制器。示例: ''@ControllerAdvice public class ValidatorAdvice { @Autowired protected LocalValidatorFactoryBean validator; @InitBinder public void initBinder(WebDataBinder binder){ 活页夹。addValidators(new CollectionValidator(validator)); } }'' – thorinkor 2017-01-23 08:42:55
@thorinkor没错,但是这个机制在我写这个答案时并不存在 – 2017-01-23 10:19:40