Как проверить @RequestParam весной, чтобы использовать контроллер и валидатор

#java #spring #validation #spring-mvc

#java #весна #проверка #spring-mvc

Вопрос:

Я новичок в 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, но мне сказали, что они предназначены для проверки формы бизнес-объектов, а не для простой переменной.

Или, если валидатор не может быть использован, могу ли я использовать собственные сообщения 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>   
  

Кто-нибудь может предложить, как можно улучшить этот метод?

Ответ №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

  3. В JSP добавьте логику ошибок

Спасибо, Паван

Комментарии:

1. Спасибо, Паван. Я уже пробовал это, но безуспешно, и мне было выдано множество сообщений, касающихся того факта, что поле id не было частью JavaBean. Предназначены ли валидаторы только для JavaBeans или нет?