SpringMVC支持对上传的内容进行校验,Validator接口,目的就是实现校验的功能。
我们在控制器的映射方法中可以写一些自定义类型的参数,那么我们需要对这样的对象进行属性的校验就可以使用校验器啦。
比如,我有一个新闻类
public class News {
private int id;
private String content;//新闻内容
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
自定义校验器
@Service
public class NewsValidation implements Validator{
@Override
public boolean supports(Class<?> clz) {
// TODO Auto-generated method stub
return News.class.equals(clz);
}
@Override
public void validate(Object obj, Errors errors) {
// TODO Auto-generated method stub
News news=(News) obj;
//参数说明:1、错误对象2、属性名3、国际化的key4、提示信息
ValidationUtils.rejectIfEmpty(errors, "content", null, "内容不能为空");
if(news.getId()<1 ){
errors.rejectValue("id",null, "序号不能小于1");
}
if(!news.getContent().matches("[a-zA-Z]{10,}"))
{
errors.rejectValue("content", null, "内容只能是字母组成,最少10位");
}
}
}
控制器:
@Controller
public class NewsController {
//注入校验器对象
@Autowired
private NewsValidation nv;
@ModelAttribute("news")
public News pre(){
return new News();
}
//添加自定义校验器
@InitBinder
public void test3(DataBinder dataBinder){
dataBinder.replaceValidators(nv);
}
@RequestMapping("/vtest")
public String test1(){
return "validatortest";
}
//校验的方法,注意2个参数要挨着
@RequestMapping("/validtor")
public String test2(@Validated News news,Errors errors){
return "validatortest";
}
}
页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SpringMVC的表单校验</title>
<style type="text/css">
.error{
color: red;
font-size: 12px;
}
</style>
</head>
<body>
<h1>SpringMVC的表单校验</h1>
<div>
<f:form action="validtor" commandName="news">
序号:<f:input path="id"/><f:errors cssClass="error" path="id"></f:errors><br/>
内容:<f:input path="content"/><f:errors cssClass="error" path="content"></f:errors><br/>
<f:button>校验</f:button>
</f:form>
</div>
</body>
</html>