springMVC中使用 JSR-303验证器( Validation 接口 )
在pom.xml,添加validator验证器的依赖

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
新建一个Cat类
package com.oukele.model;
import javax.validation.constraints.*;
public class Cat {
@NotBlank//验证字符串非空
private String id;//猫的编号
@NotBlank//验证字符串非空
private String name;//猫的名字
@Max(value = 5)//最大年龄
@Min(value = 1)//最小年龄
private int age;//猫的年龄
@Pattern(regexp = "^[0-9]{11}$")//电话的格式
private String tel;//铲屎官的电话\
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "Cat{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
", tel='" + tel + '\'' +
'}';
}
}
后端代码:
package com.oukele.web; import com.oukele.model.Cat;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import javax.validation.Valid; @Controller
public class CatController { /**
* 请求url:/cat
* 请求方式:post
* 接收参数:一个经过字符格式转化的对象,json
* 返回参数:一个cat对象
* @Valid 开启验证 @Valid后面跟着某个实体类
* */
@RequestMapping(path = "/cat",method = RequestMethod.POST)
@ResponseBody
private Cat cat(@Valid @RequestBody Cat cat, BindingResult result){
return cat;
} }
前端请求代码:

fetch('/cat', {
method: 'post',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
id:' ',
name:'tom',
age:0,
tel:''
})
}).then(resp => resp.json())
.then(console.log)
.catch(console.error);
在后台设置一个断点,当请求成功的时候,将会发现,程序帮我们捕获了三个error,


这些刚好满足我们刚刚在实体类定义的验证注解。
自定义验证注解
@CatId 验证猫的编号里面不能有数字
@CallPhone 验证手机号数为11位
@CatId
package com.oukele.my; import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.regex.Pattern; @Target({ElementType.ANNOTATION_TYPE,ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CatValidator.class)
public @interface CatId { String message() default "这只猫的编号太长啦"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { };
}
class CatValidator implements ConstraintValidator<CatId,String>{ @Override
public void initialize(CatId constraintAnnotation) { } @Override
public boolean isValid(String value, ConstraintValidatorContext context) { //假设 每只猫的编号都不能有数字
return Pattern.matches("[^0-9]",value);
}
}
@CallPhone
package com.oukele.my; import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.regex.Pattern; @Target({ElementType.ANNOTATION_TYPE , ElementType.METHOD , ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CallPhoneValidator.class)
public @interface CallPhone { String message() default "电话号码格式错误..."; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { };
}
class CallPhoneValidator implements ConstraintValidator<CallPhone,String>{ @Override
public void initialize(CallPhone constraintAnnotation) { } @Override
public boolean isValid(String value, ConstraintValidatorContext context) { return Pattern.matches("^[0-9]{11}$",value);
}
}
使用上我们自定义的注解

前端请求:

fetch('/cat', {
method: 'post',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
id: '1234567888',
name: 'tom',
tel: '10000000000',
age:6
})
}).then(resp => resp.json())
.then(console.log)
.catch(console.error);
结果:

(个人笔记,写得很菜,请见谅)
springMVC中使用 JSR-303验证器( Validation 接口 )的更多相关文章
- SpringMVC中的 JSR 303 数据校验框架说明
JSR 303 是java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE 6.0中. JSR 303 通过在Bean属性上标注类似于@NotNull.@Max等标准的注解指定校验规则 ...
- 关于Springmvc中include与Sitemesh装饰器的基本使用
关于Springmvc中include与Sitemesh装饰器的使用 !!!转载请注明出处=>http://www.cnblogs.com/funnyzpc/p/7283443.html 静态包 ...
- SSM-SpringMVC-12:SpringMVC中BeanNameViewResolver这种视图解析器
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 视图解析器,这个很熟悉啊,之间就用过,就是可以简写/和.jsp的InternalResourceViewRes ...
- SpringMvc中的校验框架@valid和@validation的概念及相关使用 和BindingResult bindingResult
1.比较 @Valid是使用hibernate validation的时候使用 @Validated 是只用spring Validator 校验机制使用\ 2.实现 其中,@valid,java的 ...
- Spring MVC -- 验证器
输入验证是Spring处理的最重要Web开发任务之一.在Spring MVC中,有两种方式可以验证输入,即利用Spring自带的验证框架,或者利用JSR 303实现.本篇博客将介绍这两种输入验证方法. ...
- SpringMVC:学习笔记(7)——验证器(JSR303)
JSR 303(Bean Validation ) 说明: 在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情.应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是 ...
- JSR 303 进行后台数据校验
一.JSR 303 1.什么是 JSR 303? JSR 是 Java Specification Requests 的缩写,即 Java 规范提案. 存在各种各样的 JSR,简单的理解为 JSR 是 ...
- 自己定义验证器——用Struts2框架以框架师的思维灵活做好该事情
面对的问题:自己定义一个18位身份验证器.编写验证器.在validators.xml文件里进行注冊.在验证配置文件里使用? 第一部分:理解Struts2中自带的验证器 第二部分:如何通过server( ...
- 使用google身份验证器实现动态口令验证
最近有用户反应我们现有的短信+邮件验证,不安全及短信条数限制和邮件收验证码比较慢的问题,希望我们 也能做一个类似银行动态口令的验证方式.经过对可行性的分析及慎重考虑,可以实现一个这样的功能. 怎么实现 ...
随机推荐
- Kali Linux 2019.2使用华为源
一.将默认的配置源注释掉 root@zinuo:~# vim /etc/apt/sources.list 注释: #deb http://http.kali.org/kali kali-rolling ...
- [转帖]看完这篇文章,我奶奶都懂了https的原理
看完这篇文章,我奶奶都懂了https的原理 http://www.17coding.info/article/22 非对称算法 以及 CA证书 公钥 核心是 大的质数不一分解 还有 就是 椭圆曲线算法 ...
- windows10专业版激活
[1]右击我的电脑->属性,查看激活情况 [2]管理员身份打开CMD [2.1]如果不知道CMD是什么东西 [2.2]如果上面那个也找不到,直接按windows键(就是ctrl和alt中间那个键 ...
- Linux的桌面环境gnome、kde、xfce、lxde 等等使用比较
如果不是加入了图形界面,微软的Windows系列操作系统不会成功地占领计算机桌面这块高地.这种人机交换的图形化界面,使得界面更加直观.简易.而且更人性化,同时也大大减少了使用者的认知负担,普通用户无需 ...
- sql server查询数据库连接数
设置最大连接数 下面的T-SQL 语句可以配置SQL Server 允许的并发用户连接的最大数目. exec sp_configure 'show advanced options', 1exec s ...
- windows 安装 celery 避坑指南,看这篇就够了
- 【2017.12.02】C组比赛总结
这次考得不怎么样,只有200分! T1:读书 这题水水水! 这题就是一道循环题嘛! 直接一边循环一边做就好了! T2:恐怖分子 这题我是直接暴力的. 这题就是求至少用多少条经过(x0,y0)的不同直线 ...
- nigx下配置tp5.1路由
打开宝塔面板,找到你要配置路由的网站并找到配置文件(如图1) (图1) 2.在配置文件里添加一下代码 set $root = /www/wwwroot/www.blogs.test/public; # ...
- 打印指针要用%p而不要用%x
注意: 打印指针要用%p而不要用%x 原因: https://boredzo.org/blog/archives/2007-01-23/please-do-not-use-percent-x-for- ...
- CVE-2018-19985漏洞学习
简介 4.19.8之前,在Linux内核中,hso_probe()函数中发现了一个缺陷,该函数从USB设备(作为u8)读取if_num值,并且不需要对数组进行长度检查就使用它来索引数组,从而导致在hs ...