目录
一、JSR303
1.1 JSR303的简介
什么是JSR303?
JSR303是一个:{---服务端校验---}
它的作用:
解决了越过表单验证{客户端},直接访问页面的问题;
1.2 JSR303实现判空校验
我们通过上机实操来认识一下JSR303,实现的一些步骤:
① 导入pom依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.7.Final</version>
</dependency>
② 在待校验的数据库列段对应的实体类属性打上校验标签:非空校验
三种注解验证:
* @NotNull:作用于基本数据类型
* @NotEmpty:作用于集合
* @NotBlank:作用于字符串
实体类:Clazz.java
package com.leaf.ssm.model;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
* @NotNull:作用于基本数据类型
* @NotEmpty:作用于集合
* @NotBlank:作用于字符串
*/
public class Clazz {
@NotNull(message = "cid不能为空")
protected Integer cid;
@NotBlank(message = "班级名称不能为空")
protected String cname;
@NotBlank(message = "教员老师不能为空")
protected String cteacher;
protected String pic;
public Clazz(Integer cid, String cname, String cteacher, String pic) {
this.cid = cid;
this.cname = cname;
this.cteacher = cteacher;
this.pic = pic;
}
public Clazz() {
super();
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getCteacher() {
return cteacher;
}
public void setCteacher(String cteacher) {
this.cteacher = cteacher;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
}
③ 在controller层方法上添加@Valid注解配合前面的校验标签;
添加BindingResult,此对象包含所有校验为通过的错误信息;
④ 将所有的错误信息以Map集合的方式保存,并且传递到前台页面展示。
总的来说就是编写一个用来校验的方法:
valiAdd(@Valid Clazz clazz, BindingResult bindingResult,HttpServletRequest request)
/**
* 校验的方法(演示校验注解)
* @Valid:是与实体类中的服务端校验注解配合使用的
* BindingResult:存放了所有违背校验的错误信息
* @param clazz
* @param bindingResult
* @return
*/
@RequestMapping("/valiAdd")
public String valiAdd(@Valid Clazz clazz, BindingResult bindingResult,HttpServletRequest request){
if(bindingResult.hasErrors()){//违背了规则
HashMap msg = new HashMap();
//拿到所有错误
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
for (FieldError fieldError : fieldErrors) {
//cid:cid不能为空
System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());
//msg.put(cid, cid不能为空);
msg.put(fieldError.getField(),fieldError.getDefaultMessage());
}
//如果出现了错误,应该将提示语显示在表单提示元素后方
request.setAttribute("msg",msg);
return "clzEdit";
}else{//没有违背
this.clazzBiz.insertSelective(clazz);
}
return "redirect:/clz/list";
}
接下来就让我们来测试一下是否成功校验啦:
新增:
校验成功~
二、拦截器
2.1 什么是拦截器?
拦截器的初步认知:
① SpringMVC的处理器拦截器,依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。
② 一个拦截器实例在一个controller生命周期之内可以多次调用。
拦截器的三个特点:
1) interceptor属于SpringMVC技术,必须要有SpringMVC环境才可以使用
2) interceptor通常对处理器Controller进行拦截
3) interceptor只能拦截dispatcherServlet处理的请求