【问题标题】:How to validate @RequestParam in Spring to use controller and validator如何在 Spring 中验证 @RequestParam 以使用控制器和验证器
【发布时间】:2014-06-16 23:12:45
【问题描述】:

我是 Spring 新手,必须处理 Spring 控制器中的一个有效方法,但我想稍微改进一下代码。

该方法部分在 Spring 中实现,需要验证用户在页面上输入的内容。这有两个阶段:首先是检查用户的输入是否为数字,然后检查数据库以确保输入的值存在用户。

方法是:

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(@RequestParam("id") String id,
                    SessionStatus sessionStatus,
                    Model model) {                
    Integer personId = null;
    try {            
        personId = Integer.parseInt(id);
    }
    catch(NumberFormatException e) {                           
        model.addAttribute("message", "Please enter a valid ID.");
        sessionStatus.setComplete();            
        return "errorPage";
    }  

    Person person = null;          
    person = personService.get(personId);           
    if (person == null) {                    
        model.addAttribute("message", "Please enter a valid ID.");
        sessionStatus.setComplete();              
        return "errorPage";
    }        
    model.addAttribute("person", person);
    sessionStatus.setComplete();   
    return "userPage";        
}    

我想在这里使用 Spring Validator,但有人告诉我这些是用于业务对象的表单验证,而不是一个简单的变量。

或者如果不能使用 Validator,我可以使用 Spring 自己的消息传递在页面上向用户显示错误吗?

所以我会在表格上写这样的东西:

 <form:form action="/login" method="get"> 
        <form:input path="id" />
        <form:errors path="id" />                             
        <input type="submit" value="Submit">
        <input type="Reset" value="Reset">              
 </form:form>   

谁能建议如何改进这种方法?

【问题讨论】:

    标签: java spring validation spring-mvc


    【解决方案1】:

    添加验证的步骤。

    1. 编写一个验证器类并实现验证器类,为orerridden方法提供实现

      import org.springframework.validation.Errors;
      import org.springframework.validation.ValidationUtils;
      import org.springframework.validation.Validator;
      
      public class LoginValidator implements Validator{
      
       @override
       public void validate(Object login, Errors err ){
           //Write your logic to follow up your Login validation
           ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "field.required", "UserName Required field");
           ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required", "Password Required field");
       }
      
      }
      
    2. 然后在*-servlet.xml中创建一个bean入口

    3. 在JSP中添加错误逻辑

    谢谢 帕万

    【讨论】:

    • 谢谢帕万。我已经尝试过了,但没有成功,而且我收到了大量关于 id 字段不是 JavaBean 的一部分的消息。验证器是否仅用于 JavaBeans?
    猜你喜欢
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多