Spring自带的校验框架Validation的使用实例

网友投稿 250 2023-01-10


Spring自带的校验框架Validation的使用实例

1.首先来一个项目结构图以及所需jar包

可以看到,没有添加除了日志和jstl相关的jar包外,没有其他spring以外的第三方jar包(即使用的是spring自带的校验框架)。

2.从前台页面开始,首先是接收用户信息的表单loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib prefix="form" uri="http://springframework.org/tags/form" %>

3.实体类User.java

public class User {

private String loginname;

private String password;

//省略set和get方法…

}

4.控制器UserController.java

@Controller

public class UserController {

//注入UserValidator对象

@Autowired

@Qualifier("userValidator")

private UserValidator userValidator;

@RequestMapping(value="/{formName}")

public String loginForm(

@PathVariable String formName,Model model){

User user = new User();

model.addAttribute("user", user);

// 动态跳转页面

return formName;

}

@RequestMapping(value="/login", method=RequestMethod.POST)

public String login(@ModelAttribute User user,Model model,Errors errors){

model.addAttribute("user", user);

//调用userValidator的验证方法

userValidator.validate(user, errors);

//如果验证不通过跳转到loginForm视图

if(errors.hasErrors()){

return "loginForm";

}

return "success";

}

}

5.校验器UserValidator.java

//实现Spring的Validator接口

@Repository("userValidator")

public class UserValidator implements Validator{

//该校验器能够对clazz类型的对象进行校验

public boolean supports(Class> clazz) {

//User指定的class参数所表示的类或接口是否相同,或是否是其超类的超接口

return User.class.isAssignableFrom(clazz);

}

//对目标类target进行校验,并将校验错误记录在errors中

public void validate(Object target, Errors errors) {

/**

*使用ValidationUtils中的一个静态方法rejectIfEmpty()来对

*loginname属性进行校验,假若‘loginJaGyxxztname'属性是null或者空字符

*串的话,就拒绝验证通过。

*/

ValidationUtils.rejectIfEmpty(errors, "loginname", null,"登录名不能为空");

ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", null,"密码不能为空");

User user = (User) target;

if(user.getLoginname().length() > 10){

//使用Errors的rejectValue方法验证

errors.rejectValue("loginname", null, "用户名不能超过10个字符");

}

if(user.getPassword() != null && !user.getPassword().equals("")

&& user.getPassword().length() <6){

errors.rejectValue("password", null, "密码不能小于6位");

}

}

}

6.spring的JaGyxxzt配置文件和web.xml的配置文件略……

小结:

第一遍敲这个代码的时候,有着各种各样的小问题出现,比较多的就是 类所对应的路径要import对,因为不同的包中可能会有相同名字的类,而此时一不小心就会导错了包,会给后面的编写代码带来不必要的麻烦。昨天的时候就调试这个小小的demo就花了好久的时间,后来也没再去管,然后今天有空了又重新敲了一遍代码,发现没有问题,直接一次就通过了,然后去对比昨天的代码发现,是我在第一遍敲代码的时候把实体类的get和set方法的名字敲错了(追溯起来的话是写属性的时候把属性名敲错了,然后get和set方法是自动生成的,后面去修改属性时导致没有将相应的set和get方法改正),哎,,,还是太粗心

ok,然后就是启动服务器运行程序…

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务网关无法进行路由(网关调用微服务错误)
下一篇:Java实现不同的类的属性之间相互赋值
相关文章

 发表评论

暂时没有评论,来抢沙发吧~