2019独角兽企业重金招聘Python工程师标准>>>

转载  http://www.cnblogs.com/bianzy/p/6639799.html

SpringBoot在内部通过集成hibernate-validation 已经实现了JSR-349验证规范接口,在SpringBoot项目中只要直接使用就行了。

一般用在Controller中用于验证前端传来的参数。

验证分两种:对封装的Bean进行验证  或者  对方法简单参数的验证

一、进行BeanValidate

1.定义Bean

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

public class ValidBean {

    @NotNull(message = "名字不能为空")

    private String name;

    @Min(value = 18, message = "年龄必须大于18")

    private int age;

    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;

    }

}

  2.使用

1

2

3

4

5

6

@RequestMapping("bean")

    @ResponseBody

    public String say(@Valid ValidBean bean, BindingResult bindingResult){       

        return bindingResult.hasErrors() ?

        bindingResult.getFieldError().getDefaultMessage() : "incorrect";

    }

3.注意
@Valid 和 BindingResult 是一一对应的,如果有多个@Valid,那么每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果,顺序不能乱

4.Api
@Null 只能是null
@NotNull 不能为null 注意用在基本类型上无效,基本类型有默认初始值
@AssertFalse 必须为false
@AssertTrue 必须是true

字符串/数组/集合检查:(字符串本身就是个数组)
@Pattern(regexp="reg") 验证字符串满足正则
@Size(max, min) 验证字符串、数组、集合长度范围
@NotEmpty 验证字符串不为空或者null
@NotBlank 验证字符串不为null或者trim()后不为空

数值检查:同时能验证一个字符串是否是满足限制的数字的字符串
@Max 规定值得上限int
@Min 规定值得下限
@DecimalMax("10.8") 以传入字符串构建一个BigDecimal,规定值要小于这个值 
@DecimalMin 可以用来限制浮点数大小
@Digits(int1, int2) 限制一个小数,整数精度小于int1;小数部分精度小于int2
@Digits 无参数,验证字符串是否合法
@Range(min=long1,max=long2) 检查数字是否在范围之间
这些都包括边界值

日期检查:Date/Calendar
@Post 限定一个日期,日期必须是过去的日期
@Future 限定一个日期,日期必须是未来的日期

其他验证:
@Vaild 递归验证,用于对象、数组和集合,会对对象的元素、数组的元素进行一一校验
@Email 用于验证一个字符串是否是一个合法的右键地址,空字符串或null算验证通过
@URL(protocol=,host=,port=,regexp=,flags=) 用于校验一个字符串是否是合法URL

二、进行MethodValidate

1.注入MethodValidationPostProcessor Bean

1

2

3

4

@Bean

    public MethodValidationPostProcessor methodValidationPostProcessor() {

        return new MethodValidationPostProcessor();

    }

2.在要MethodValidate的类上加上注解@Validated
3.在方法中使用

1

2

3

4

5

6

7

8

9

10

@Controller

@Validated

@RequestMapping("valid")

public class ValidController {

    @RequestMapping("/check")

    @ResponseBody

    public String check(@Min(value = 2,message = "age必须大于2"int age) {

        return "" + age;

    }

}

4.处理校验失败
默认校验失败后会让方法抛出Unchecked Exception,在springboot中默认是会让其跳转到error页面,所以只要添加一个这个异常的处理器就行:

1

2

3

4

5

6

7

8

9

10

@ExceptionHandler(value = { ConstraintViolationException.class })

    @ResponseBody

    public String handleResourceNotFoundException(ConstraintViolationException e) {

        Set<ConstraintViolation<?>> violations = e.getConstraintViolations();

        StringBuilder strBuilder = new StringBuilder();

        for (ConstraintViolation<?> violation : violations ) {

            strBuilder.append(violation.getMessage() + "\n");

        }

        return strBuilder.toString();

    } 

5.注意
如果使用了@Validated,那么BeanValidate也会抛出异常而不是之前的封装在BindingResult中

三、自定义异常处理
用到再查,网上很多例子

四、

验证其实基于spring AOP ,所以其实任何Spring Bean都能利用这些注解做验证,比如Service层。但用的最多的还是Controller层

转载于:https://my.oschina.net/chen1988/blog/1511992

Spring boot 参数校验相关推荐

  1. Spring Boot参数校验以及分组校验的使用

    简介:做web开发基本上每个接口都要对参数进行校验,如果参数比较少,还比较容易处理,一但参数比较多了的话代码中就会出现大量的if-else语句.虽然这种方式简单直接,但会大大降低开发效率和代码可读性. ...

  2. 参数幂等性校验失败_快速入手 Spring Boot 参数校验

    1.背景介绍 2.Spring Boot文档中的Validation 3.Hibernate Validator 4.Spring Validator 5.示例 6.补充 <Netty 实现原理 ...

  3. spring boot参数校验 告别校验胶水代码

    ​ springboot进行参数校验 文章目录 前言 普通的逻辑代码校验 PathVariable 路径变量校验 JSR规范是什么? springboot-JSR303参数校验 引入参数校验依赖 官网 ...

  4. @valid 校验_一文带你快速入手 Spring Boot 参数校验

    点击上方"Java专栏",选择"置顶或者星标" 第一时间阅读精彩文章! ☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜ 作者:狂乱的贵公子 来源: ...

  5. Spring Boot参数校验

    1. 概述 作为接口服务提供方,非常有必要在项目中加入参数校验,比如字段非空,字段长度限制,邮箱格式验证等等,数据校验常用到概念: JSR303/JSR-349: JSR303是一项标准,只提供规范不 ...

  6. Spring MVC 参数校验

    Spring 4 以上支持JSR303校验API.所以必须要Spring4. 我用Spring boot,所以引入 <dependency><groupId>org.sprin ...

  7. Spring Boot数据校验

    数据校验是一个相当重要的环节,使用Spring Boot 进行数据校验. 添加校验依赖 全部依赖文件如下 <?xml version="1.0" encoding=" ...

  8. Spring请求参数校验

    SpringMVC支持的数据校验是JSR303的标准,通过在bean的属性上打上@NotNull.@Max等进行验证.JSR303提供有很多annotation接口,而SpringMVC对于这些验证是 ...

  9. java 启动参数 别名,Spring boot 参数别名处理

    背景 处理老系统时,前端请求的参数使用的蟒蛇式(如:create_time),而后端接收使用的是驼峰式(如createTime).我们想自动进行参数转换. Spring 提供的能力 @RequestP ...

最新文章

  1. 新手对于iPhone开发环境等入门问题解答汇总
  2. 声明式事务和编程式事务
  3. 单片机 PWM输出 c
  4. 热插拔服务器电源维修,无需关停系统即可热插拔,TE Connectivity推出滑轨电源连接器...
  5. sparkpython多线程_如何在PySpark(Spark流)中组合多个rdd?
  6. 安装.net Framework 3.5 SP1非常慢的解决方案
  7. [Flutter] 一些面试可能会问基础知识
  8. 数论基础及其代码实现
  9. 弧微分直角系最详细推导
  10. 信号隔离器的功能原理是什么?
  11. VMware桥接模式下虚拟机ping主机不通
  12. 蚂蚁金服智能推荐引擎解决方案与实践
  13. cocos恭喜喜庆粒子特效
  14. 欧阳的科研历程-1 目标
  15. iPhone像素点和常用控件尺寸
  16. 借Kinect 扫描 软件 reconstructMe skanect ksan3d
  17. CSP漫画工作室clipstudiopaint最新版本2022功能介绍
  18. 怎么能免费制作自己的微信小程序?
  19. Exception in thread “main“ java.time.DateTimeException: Unable to extract ZoneId from temporal
  20. spring中依赖注入方式总结

热门文章

  1. 独家 | 一文盘点AutoML 库
  2. 机器学习:循环神经网络知识要点
  3. DeepMind网红博士300页论文出炉:面向NLP的神经迁移学习
  4. 管理到底是“管人”还是“管事”,百分之九十的人理解有问题
  5. 【Science】CMU机器学习系主任:八个关键标准判别深度学习任务成功与否
  6. 国内丨人工智能(AI)引发的中国经济新动能
  7. 有序回归(ordinal regression)
  8. 美国国家科学院发布:材料有哪些研究前沿?
  9. 下一次工业革命:计算生物学与生物平台
  10. 谷歌自动驾驶是个大坑,还好中国在构建自己的智能驾驶大系统