一、添加依赖

<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. 《Python Data Structures》Week5 Dictionary 课堂笔记

    Coursera课程<Python Data Structures> 密歇根大学 Charles Severance Week5 Dictionary 9.1 Dictionaries 字 ...

  2. spring boot 1.5.10.RELEASE ,spring boot admin 1.5.7 添加 security

    生产环境的客户端actuator最好是加上security校验,不然配置信息不登录就能直接获取到 server端配置,参考官方 文档,https://codecentric.github.io/spr ...

  3. MVC 源码系列之路由(一)

    路由系统 注释:这部分的源码是通过Refector查看UrlRoutingModule的源码编写,这部分的代码没有写到MVC中,却是MVC的入口. 简单的说一下激活路由之前的一些操作.一开始是由MVC ...

  4. linux shell中的正则表达式

    正则表达式的使用 正则表达式,又称规则表达式.(英语:Regular Expression [ˈreɡjulə] 规则的 [ iksˈpreʃən] 表达 ),在代码中常简写为regex.regexp ...

  5. python爬虫相关安装与应用

    1.mysql数据库用于存储大量数据. 2.Navicat for MySQL以图形和表格等形式管理数据库工具. 3.编程语言python3与环境配置 4.pythcharm集成开发环境(社区版)不需 ...

  6. ex3 多分类和神经网络

    介绍 在本练习中,您将实现一对多逻辑回归和神经识别手写数字的网络.在开始编程之前练习,我们强烈建议观看视频讲座并完成相关主题的复习问题.要开始练习,您需要下载起始代码并将其内容解压缩到要完成练习的目录 ...

  7. Djaon 基于 Ajax 的 json 数据传输

    关键参数:contentType:"application/json" data:JSON.stringify({ json数据 }) 再views.py中,使用request.d ...

  8. mysql自动备份脚本

    linux系统mysql5.6版本实现自动备份步骤 1.sudo mysql --help | grep my.cnf 查找my.cnf文件2.在文件中添加如下行实现免输入密码[mysqldump]u ...

  9. Python笔记(读取txt文件中的数据)

    在机器学习中,常常需要读取txt文本中的数据,这里主要整理了两种读取数据的方式 数据内容 共有四列数据,前三列为特征值,最后一列为数据标签 40920 8.326976 0.953952 3 1448 ...

  10. Linux mint启用内核转储

    1.查看当前是否启动了内核转储: star@sky:~$ ulimit -c unlimited 2.如果上面显示为0,即没有开启,那么,直接执行 ulimit -c unlimited 就好了. 3 ...