SpringMVC服务器验证一种是有两种方式,一种是基于Validator接口,一种是使用Annotaion JSR-303标准的验证,下面主要是学习这两种,工作中推荐后者,方便很多
一.基于Validator接口的验证.
首先创建User实例,并加入几个属性
public class User {
private String username;
private String password;
private String nickname;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
@Override
public String toString() {
return "username--"+username+"password--"+password+"nickname--"+nickname;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
接着创建用于校检的类UserValidator,让其实现Validator,覆盖其中的两个方法
import main.java.model.User;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> aClass) {
//判断是否是要校验的类,这里是User
return User.class.equals(aClass);
}
@Override
public void validate(Object o, Errors errors) {
User u = (User) o;
if (null == u.getPassword() || "".equals(u.getPassword())){
//此方法可以加四个参数,第一个表单域field,
//区分是哪个表单出错,第二个errorCode错误码,
//第三个制定了资源文件中占位符,第四个具体错误返回信息
//简写版可以把2,3参数去掉
errors.rejectValue("password",null,null,"password is null");
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
上面的类只实现了对密码判断是否为空,为空则注册这一错误信息,也就是”password is null”,接下来要实现控制器,控制器要做的事情,第一是注册这个校验器,第二是实现校验.
import main.java.model.User;
……
/**
* 加上@Controller决定这个类是一个控制器
*/
@Controller
@RequestMapping(“/user”)
public class HelloController {
//我们知道在Controller类中通过@InitBinder标记的方法只有在请求当前Controller的时候才会被执行
//所以在这里注册校验器
@InitBinder
public void initBainder(DataBinder binder){
binder.replaceValidators(new UserValidator());
}
//这个方法主要是跳转到登录页面
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String login(Model model){
model.addAttribute(new User());
return "user/login";
}
//处理登录表单
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(@Validated User user, BindingResult br){
if (br.hasErrors()){
return "user/login";
}
return "--";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
上面代码可以看到@Validated User user, BindingResult br这两个参数,@Validated表明参数user是要校验的类,BindingResult是存储错误信息的类,两者必须一一对应,并且位置挨着,不能中间有其他参数,
最后随便写一个jsp页面实现校检
<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>
<%@taglib prefix=”sf” uri=”http://www.springframework.org/tags/form” %>
<%
request.setCharacterEncoding(“utf-8”);
%>
用户登录
用户名:
密码:
昵称:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
这里写图片描述
前面实现的是局部校验,只对当前控制器有效,如果要实现全局校验的话需要配置springMVC.xml文件