Java spring mvc验证最佳实践

Java spring mvc验证最佳实践,java,spring-mvc,Java,Spring Mvc,我主要从文档中学习SpringMVC2.5。有人能解释一下吗 使用命令对象与使用@modeldattribute传递对象的优点/区别 除了编写验证器对象之外,还有更简单的方法进行验证吗 另外,在这段代码中,ValidationUtils.rejectIfEmpty(e,“name”,“name.empty”)工作?当person对象未传入时,如何检查person对象上的名称是否为空 public void validate(Object obj, Errors e) {

我主要从文档中学习SpringMVC2.5。有人能解释一下吗

  • 使用
    命令
    对象与使用
    @modeldattribute
    传递对象的优点/区别
  • 除了编写验证器对象之外,还有更简单的方法进行验证吗
另外,在这段代码中,
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");
        }
    }
公共无效验证(对象obj,错误e){
ValidationUtils.rejectIfEmpty(e,“name”,“name.empty”);
人员p=(人员)obj;
if(p.getAge()<0){
e、 拒绝价值(“年龄”、“负面价值”);
}else if(p.getAge()>110){
e、 拒绝价值(“年龄”、“太老了”);
}
}
(该代码来自第5.2节)

谢谢

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

    @RequestMapping(...) public ModelAndView foo(Command c) { ... }
    
    那么它与下面的相同

    @RequestMapping(...) public ModelAndView foo(@ModelAttribute Command c) { ... }
    
    因为
    @modeldattribute
    可以省略。实际需要它的唯一情况是,您需要显式指定属性名(否则它将被推断为第一个字母不大写的类名,即
    命令

  • 在Spring2.5中-否。在Spring3.0中,您可以与JSR-303bean验证API一起使用

  • Errors
    对象引用了正在验证的对象


    • 以下是您第一个问题的答案。

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


      在第三版Spring中,您还可以使用注释进行Bean验证。

      我想我对命令对象的理解还不清楚。我认为使用@modeldattribute可以对包含表单中的属性的对象进行注释,这些属性将为您设置。例如,@modeldattribute User User将从注册表中为您提供一个预填充的用户对象。这就是我想做的。但是Command对象有什么意义呢?@mkoryak:我使用名称
      Command
      作为您自己对象的占位符,例如您的示例中的
      User
      。很好。所以commandName是我不关心的老东西。