spring mvc验证最佳实践

时间:2010-12-30 17:32:02

标签: java spring-mvc

我正在学习自己的Spring MVC 2.5主要来自文档。有人可以解释以下内容:

  • 使用command个对象与使用@ModelAttribute传递对象的优点/不同。
  • 除了编写Validator对象之外,还有更简单的方法进行验证吗?

此外,在此代码中,行ValidationUtils.rejectIfEmpty(e, "name", "name.empty");如何工作?如果未传入person对象,如何检查 person 对象上的名称是否为空?

   public void validate(Object obj, Errors e) {
        ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
        Person p = (Person) obj;
        if (p.getAge() < 0) {
            e.rejectValue("age", "negativevalue");
        } else if (p.getAge() > 110) {
            e.rejectValue("age", "too.darn.old");
        }
    }

(此代码来自the docs的第5.2节)

由于

2 个答案:

答案 0 :(得分:3)

  • 关于命令对象的问题不是很清楚。如果您的意思是以下语法

    @RequestMapping(...) public ModelAndView foo(Command c) { ... }
    

    然后它与以下

    相同
    @RequestMapping(...) public ModelAndView foo(@ModelAttribute Command c) { ... }
    

    因为@ModelAttribute可以省略。实际需要的唯一情况是你需要明确指定属性名称(否则它将被推断为第一个字母被去除资本化的类名,即command

  • 在Spring 2.5中 - 没有。在Spring 3.0中,您可以将declarative validation与JSR-303 Bean Validation API一起使用。

  • Errors对象引用了要验证的对象。

答案 1 :(得分:1)

以下是您第一个问题的答案。 http://chompingatbits.com/2009/08/25/spring-formtag-commandname-vs-modelattribute/

根据我的经验,没有更简单的方法来完成验证,因为它很容易。您可以更轻松地将诸如commons-validator之类的库集成到您的项目中,并在表单中使用预定义的验证规则。

http://numberformat.wordpress.com/tag/spring-mvc-validation/

以及Spring的第3版,您可以使用注释来使用Bean验证。