DB数据的@Valid和绑定结果


问题内容

我在其中一个Web应用程序中使用Spring验证(JSR
303)。当用户提交数据并且Spring验证工作得很整洁时,我没有任何问题,但是我遇到了必须从服务中获取数据并对其进行验证的情况。然后将它们绑定到我的视图。(某种形式的验证)。在这种情况下,我该如何使用@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;

问题答案:

据我了解,您需要将默认值注入org.springframework.validation.Validator到控制器中(如果@Valid可行,您应该能够做到)

@Autowired
Validator validator;

手动运行验证,如下所示

User user = ...;
BindingResult result = BeanPropertyBindingResult(user, "user");
validator.validate(user, result);

并将结果合并为ModelMap(将其声明为方法的参数),如下所示

model.addAllAttributes(result.getModel());