背景
字段校验一般分为两种方式,第一种,前端校验,第二周,服务器端校验,不论前端校验如何,服务器端的校验是必不可少的,那么,在springMvc的框架中,怎么校验比较方便实用呢?在此,我会分别针对服务器端的form表单提交服务器校验和普通的http接口提交服务器服务器端的校验方式做一些介绍。
一、form表单提交服务器校验字段方式
1、hibernate-validator配合spring的form标签方式
需要的jar:
hibernate-validator-4.3.0.Final.jar
jboss-logging-3.2.1.Final.jar
validation-api-1.0.0.GA.jar
要校验的实体:
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;
public class User {
@NotNull(message="名字不能为空")
@Length(min = 6,max=12,message="用户名要在六位以上")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
// @Email(message="邮箱格式错误")
// private String email;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// public String getEmail() {
// return email;
// }
// public void setEmail(String email) {
// this.email = email;
// }
}
这个需要校验的实体用注解对字段校验方式进行标注
处理页面请求的Controller:
@Controller
@RequestMapping(value = "/user")
public class UserController {
@RequestMapping("/login")
public String login(@Valid User user, BindingResult result, Model model,HttpServletRequest request) {
//需要添加,否则spring的form标签会处理会失败,报错
model.addAttribute(user);
if (result.hasFieldErrors()) {
return "user/login";
}
return "/";
}
}
控制器中,要用@Valid标记要校验的实体,并且紧跟着的参数是BindingResult result,这样在处理业务之前,会先校验user这个实体里面的字段是否合法,如果不合法,会将在User这个bean中的提示消息返回给jsp页面中(但是这个需要spring form标签的支持,一旦用了spring from 的标签作为表单支持的时候,对应的Controller 的方法中一定要给model或者modelMap中返回设置一个被校验对象的值,否则会报错,具体下面会有介绍)
jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri = "http://www.springframework.org/tags/form" prefix="sf" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<style type="text/css">
.error{
color:red;
}
</style>
</head>
<body>
登录页面<br>
<sf:form method="POST" modelAttribute="user">
userName : <sf:input path="userName"/>
<sf:errors path="userName" cssClass="error"/><br>
age : <sf:input path="age"/>
<sf:errors path="age" cssClass="error"/><br>
<input type="submit" value="提交">
</sf:form>
</body>
</html>
jsp页面中必须要引入
<%@ taglib uri = "http://www.springframework.org/tags/form" prefix="sf" %>
这个是 spring form 的标签库
然后在页面中使用 spring form 标签库支持的标签书写form表单,在每一个input字段的后面,书写<sf:errors path="age" cssClass="error"/><br>,这个errors的path字段要与对应的input标签的path值对应,才能在渲染页面的时候正常渲染注入。
效果图: