在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);

结果:

(个人笔记,写得很菜,请见谅)

最新文章

  1. java随笔
  2. JSP 入门 HTML嵌套Java脚步 显示时间
  3. fireworks将图片变为透明色
  4. 几种进入mysql的方法
  5. java读取properties文件的内容
  6. Fork/Join框架之双端队列
  7. iOS 图片加载框架- SDWebImage 解读
  8. MYSQL用户权限管理学习笔记
  9. seajs初尝 加载jquery返回null解决学习日志含示例下载
  10. ADO.NET 总结
  11. 基于visual Studio2013解决C语言竞赛题之1090测量重量
  12. String.valueOf() 方法的使用
  13. ES6学习目录
  14. Java版网络爬虫基础
  15. MVC4不支持EF6解决方案 &amp;&amp; Nuget控制台操作说明
  16. (一〇二)静态库(.a)的打包
  17. Angular5 宏观把控
  18. 小小知识点(四)——MATLAB如何画等高线图和线性规划约束方程
  19. python数据结构-如何在列表、字典、集合中根据条件筛选数据
  20. ANg-别人家的笔记

热门文章

  1. python-Web-django-钩子验证
  2. 华为HCNA乱学Round 7:VLAN间路由
  3. C学习笔记-指针
  4. [转帖]全方位掌握OpenStack技术知识
  5. 【pytorch】学习笔记(三)-激励函数
  6. 区间最值的优秀数据结构---ST表
  7. # N数码问题
  8. Java Web开发技术教程入门-JavaBean组件与Servlet
  9. Asp.net4.5未在web服务器上注册
  10. HTML5-placeholder属性