我在其中一个网络应用程序中使用Spring验证(JSR 303)。当用户提交数据并且弹簧验证工作非常简洁时我没有问题。但我有一个场景,我必须从服务获取数据和验证它,然后将它们绑定到我的视图。(非形式验证)。如果在这种情况下我可以使用@Valid,还是必须以不同方式完成?
这是一个示例代码,我以
开头 @RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ModelAndView getView(
@PathVariable("id") final String id, @User user,
HttpSession session) {
User user= getUser();
BindingResult result = new BeanPropertyBindingResult(user, "user");
validator.validate(user, result);
if(result.hasErrors()){
logger.log(Level.ERROR, "Errors");
}
ModelAndView view = new ModelAndView ("home");
view.addObject("user",user );
view.addAllObject(result.getModel());
return view;
答案 0 :(得分:4)
据我了解,您需要将默认org.springframework.validation.Validator
注入您的控制器(如果@Valid
有效,您应该可以这样做)
@Autowired
Validator validator;
按如下方式手动运行验证
User user = ...;
BindingResult result = BeanPropertyBindingResult(user, "user");
validator.validate(user, result);
并将结果合并到ModelMap
(将其声明为方法的参数),如下所示
model.addAllAttributes(result.getModel());