一、添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

二、实体类中添加校验规则注解

package cn.bounter.validation.entity;

import lombok.Data;
import lombok.experimental.Accessors; import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank; @Data
@Accessors(chain = true)
public class Bounter { @NotBlank
private String name; @Min(18)
private Integer age; }

JSR-303常用注解如下:

//空检查
@NotNull          对象不为null
@NotBlank         字符串不为null且不是”“ 
@NotEmpty         集合不为null且不为空
 
//长度检查
@Size(min = 1, max = 10)     字符串长度或集合大小
@Length                      字符串长度   
 
//数值检查
@Min(1)
@Max(10)
@Range(min = 1, max = 10)
 
//其他
@Email
@AssertTrue
@AssertFalse 
 
 
三、开启校验(开启后请求时会自动触发校验,校验失败抛出异常)
package cn.bounter.validation.controller;

import cn.bounter.validation.common.ResponseData;
import cn.bounter.validation.entity.Bounter;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; @RestController
@RequestMapping("/api/bounter")
public class BounterController { @PostMapping
public ResponseData<?> post(@Validated Bounter bounter) {
return ResponseData.ok(bounter);
} @PostMapping("/json")
public ResponseData<?> postJson(@Validated @RequestBody Bounter bounter) {
return ResponseData.ok(bounter);
} @GetMapping
public ResponseData<?> get(@Validated Bounter bounter) {
return ResponseData.ok(bounter);
} }

四、统一处理校验异常,并返回错误提示

package cn.bounter.validation.common;

import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; import java.util.stream.Collectors; @RestControllerAdvice
public class AppExceptionHandler { /**
* 处理不带任何注解的参数绑定校验异常
* @param e
* @return
*/
@ExceptionHandler(BindException.class)
public ResponseData<?> handleBingException(BindException e) {
String errorMsg = e.getBindingResult().getAllErrors()
.stream()
.map(objectError -> ((FieldError)objectError).getField() + ((FieldError)objectError).getDefaultMessage())
.collect(Collectors.joining(","));
//"errorMsg": "name不能为空,age最小不能小于18"
return new ResponseData<>().fail(errorMsg);
} /**
* 处理 @RequestBody参数校验异常
* @param e
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseData<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
String errorMsg = e.getBindingResult().getAllErrors()
.stream()
.map(objectError -> ((FieldError)objectError).getField() + ((FieldError)objectError).getDefaultMessage())
.collect(Collectors.joining(","));
//"errorMsg": "name不能为空,age最小不能小于18"
return new ResponseData<>().fail(errorMsg);
} }

五、如需要手动触发校验,则可使用下面的方式

package cn.bounter.validation;

import cn.bounter.validation.entity.Bounter;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.util.Set; @RunWith(SpringRunner.class)
@SpringBootTest
public class BounterValidationApplicationTests { //参数校验器
@Autowired
private Validator validator; /**
* 测试手动触发校验
*/
@Test
public void testValidation() {
Bounter bounter = new Bounter().setName("").setAge(17); Set<ConstraintViolation<Bounter>> violationSet = validator.validate(bounter);
violationSet.forEach(violation -> {
//name不能为空
//age最小不能小于18
System.out.println(violation.getPropertyPath() + violation.getMessage());
});
} }

这就是全部的步骤了,是不是觉得的挺简单的哉!那就赶快自己动手试试吧!

Github传送门:https://github.com/13babybear/bounter-validation

SpringBoot 参数校验的更多相关文章

  1. 补习系列(4)-springboot 参数校验详解

    目录 目标 一.PathVariable 校验 二.方法参数校验 三.表单对象校验 四.RequestBody 校验 五.自定义校验规则 六.异常拦截器 参考文档 目标 对于几种常见的入参方式,了解如 ...

  2. springboot 参数校验详解

    https://www.jianshu.com/p/89a675b7c900 在日常开发写rest接口时,接口参数校验这一部分是必须的,但是如果全部用代码去做,显得十分麻烦,spring也提供了这部分 ...

  3. SpringBoot 参数校验的方法

    Introduction 有参数传递的地方都少不了参数校验.在web开发中,前端的参数校验是为了用户体验,后端的参数校验是为了安全.试想一下,如果在controller层中没有经过任何校验的参数通过s ...

  4. springmvc、springboot 参数校验

    参数校验在项目中是必不可少的,不仅前端需要校验,为了程序的可靠性,后端也需要对参数进行有效性的校验.下面将介绍在springmvc或springboot项目中参数校验的方法 准备工作: 引入校验需要用 ...

  5. springboot参数校验

    为了能够进行嵌套验证,必须手动在Item实体的props字段上明确指出这个字段里面的实体也要进行验证.由于@Validated不能用在成员属性(字段)上,但是@Valid能加在成员属性(字段)上,而且 ...

  6. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  7. springboot项目--传入参数校验-----SpringBoot开发详解(五)--Controller接收参数以及参数校验----https://blog.csdn.net/qq_31001665/article/details/71075743

    https://blog.csdn.net/qq_31001665/article/details/71075743 springboot项目--传入参数校验-----SpringBoot开发详解(五 ...

  8. springboot 接口参数校验

    前言 在开发接口的时候,参数校验是必不可少的.参数的类型,长度等规则,在开发初期都应该由产品经理或者技术负责人等来约定.如果不对入参做校验,很有可能会因为一些不合法的参数而导致系统出现异常. 上一篇文 ...

  9. Java web服务端参数校验Javax.validation (springboot)

    一.基本使用 Javax.validation是spring集成自带的一个参数校验接口.可通过添加注解来设置校验条件. 下面以springboot项目为例进行说明.创建web项目后,不需要再添加其他的 ...

随机推荐

  1. So the type system doesn’t feel so static.

    object wb{ def main(args:Array[String]){ println("Happy everyday!DATA-CENTER!") println(ne ...

  2. CSS镜像

    https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/scaleX transform: scaleX(-1);/*左 ...

  3. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第2节 TCP协议_4_TCP通信的服务器端代码实现

    表示服务器的类是ServerSocket 启动服务器端 再启动客户端 客户端代码修改获取服务端会写的数据 先启动服务器端,再启动客户端 客户端打印: 服务器端读取:

  4. postman的断言/环境变量的处理

    我们做接口测试都会有一个断言操作:也有一个变量被频繁使用,这时候可以用环境变量来处理 目录 1.postman之断言 2.postman之环境变量 1.postman之断言 同样以postman的登录 ...

  5. ElasticSearch 基础 1

    ElasticSearch 基础=============================== 索引创建 ========================== 1. RESTFUL APIAPI 基本 ...

  6. C#里sqlDataAdapter.fill(DataSet,String)的用法

    第二个参数 String是指定DataSet 里表的名字,例如 sqlDataAdapter.fill(DataSet,"学生表") 指定后,以后就可以这样调用这张表 DataSe ...

  7. Flask使用原生sql语句

    安装pip install flask-sqlalchemy 创建数据库对象 # 设置数据库连接地址app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://r ...

  8. git的基本使用方法

    git的基本使用方法:https://blog.csdn.net/qq_33316091/article/details/82414389

  9. ubuntu 虚拟机配置 IP、子网掩码、网关、DNS

    ubuntu 虚拟机配置 IP.子网掩码.网关.DNS 执行 sudo vim /etc/network/interfaces 添加如下配置: auto eth0 iface eth0 inet st ...

  10. 持续集成工具——Jenkins

    一.jenkins简介 1.持续集成工具 2.基于JAVA环境 二.环境搭建 1.安装JDK 2.安装配置git 3.安装配置tomcat Tomcat是针对Java的一个开源中间件服务器(容器),基 ...