Java-Bean Validation后端校验总结

Java-Bean Validation后端校验总结ValidationInformation resource:SpringBoot Docs: 2.8.9. @ConfigurationProperties Validationurl: https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/html/spring-boot-features.html#boot-featuresSpring Boot attempts to validate @ConfigurationProperties classes whenever they are annotated with Spring’s @Validated annotation. You can use JSR-303 javax.validation constraint annotations directly on your configuration class. To do so, ensure that a compliant JSR-303 implementation is on your classpath and then add constraint annotations to your fields, as shown in the following example:每当使用 Spring 的 @Validated 注释时,Spring Boot 都会尝试验证 @ConfigurationProperties 类。 可以直接在配置类上使用 JSR-303 javax.validation 约束注释。 为此,请确保类路径上有一个兼容的 JSR-303 实现,然后向字段添加约束注释,如以下示例所示:@ConfigurationProperties(prefix="acme")@Validatedpublic class AcmeProperties {    @NotNull    private InetAddress remoteAddress;    // ... getters and setters}You can also trigger validation by annotating the @Bean method that creates the configuration properties with @Validated.还可以通过注释使用@Validated 创建配置属性的@Bean 方法来触发验证。To ensure that validation is always triggered for nested properties, even when no properties are found, the associated field must be annotated with @Valid. The following example builds on the preceding AcmeProperties example:为确保始终为嵌套属性触发验证,即使未找到任何属性,也必须使用 @Valid 注释关联字段。 以下示例建立在前面的 AcmeProperties 示例之上:@ConfigurationProperties(prefix="acme")@Validatedpublic class AcmeProperties {    @NotNull    private InetAddress remoteAddress;    @Valid    private final Security security = new Security();    // ... getters and setters    public static class Security {        @NotEmpty        public String username;        // ... getters and setters    }}JSR-303 ValidationJSR-303 是Java EE的一个子规范,官方参考实现Hibernate ValidatorJSR-303 是一个数据验证的规范,而Hibernate Validator则是实现了这一规范,可以使用注解的方式对Bean进行验证,它的内部已经定义好了一系列的限制注解,只需将需要的注解标注在需要验证的实体类的属性上或者是对应的get方法上即可JSR-303常用校验规则布尔检查注解描述@AssertFalse被标注的对象是否为False@AssertTrue被标注的对象是否为True空值检查注解描述@Null验证被标注的对象是否为NULL@NotNull验证被标注的对象是否不为NULL@NotBlank验证字符串是否非空,trim()后不为"",长度大于0@NotEmpty验证被标注对象是否为非空长度检查注解描述@Length(min,max)验证字符串长度是否在min,max范围内@Size(min,max)验证对象(Collection,String,Map,Array)是否在规定范围内日期检查注解描述@Past验证时间对象的值是否在当前时间之前@Future验证时间对象的值是否在当前时间之后@Pattern(regexp)验证字符串是否符合指定的正则表达式数值检查注解描述@Email验证被标注对象是否为邮箱格式,NULL值不验证@Valid关联对象是数组或集合时,对其元素进行校验@Digits(integer,fraction)验证字符串是否是符合指定格式的数字,integer整数精度,fraction小数精度@Min验证字符串是否是大于Min指定的最小值的数字@Max验证字符串是否是小于Max指定的最大值的数字@Range(min,max)验证元素是否在min,max范围内使用Hibernate Validator的DemoDemo的项目结构:

pom.xmlorg.hibernate.validatorhibernate-validator${hibernate-validator.version}User(Bean)/** * @Email 约束输入邮件的格式 * @NotBlank 指字符串使用trim()去掉前后空格后,不能够为空 */@ToString@AllArgsConstructor@NoArgsConstructor@Datapublic class User implements Serializable {    @NotBlank(message = "邮箱不能为空")    @Email(message = "邮箱非法")    private String userEmail;    @NotBlank(message = "电话不能为空")    @Pattern(regexp = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$",message = "手机号非法")    private String userPhone;}UserController/** * 以POST请求为例 * @Validated 注释类 * @RequestBody 可传Javabean类型 * @RequestParam 传单个参数 * @Valid 修饰在Javabean类型前 */@RestController@Validatedpublic class UserController {    @RequestMapping(value = "/test",method = RequestMethod.POST)    public boolean test(@RequestBody @Valid User user){        return true;    }    @RequestMapping(value = "/hello",method = RequestMethod.GET)    public String hello(){        return "hello,world";    }}Rusult:Postman发个请求瞅瞅结果输入正确格式的邮箱和手机

输入非法格式的邮箱

输入非法格式的手机号码

www.bdsoba.comwww.awaedu.comwww.zuowenge.cn

(0)

相关推荐

  • 注解@ConfigurationProperties使用方法

    前言# 最近在思考使用java config的方式进行配置,java config是指基于java配置的spring.传统的Spring一般都是基本xml配置的,后来spring3.0新增了许多jav ...

  • Spring MVC数据校验

    一般情况下,用户的输入是随意的,为了保证数据的合法性,数据验证是所有 Web 应用必须处理的问题. Spring MVC 有以下两种方法可以验证输入: 利用 Spring 自带的验证框架 利用 JSR ...

  •  springboot系列4

    文章目录 1.配置文件 2.YAML语法: 1.基本语法 yaml中的松散写法 2.值的写法 字面量:普通的值(数字,字符串,布尔) 对象.Map(属性和值)(键值对): 数组(List.Set): ...

  • java 全端开源 电商系统 springboot uniapp 小程序 前后端分离 高可用

    所有jar包均可从maven中央仓库下载,无二次封装jar包,全端开源,无后门,无监控. 介绍 官网:https://pickmall.cn Lilishop 是一款Java开发,基于SpringBo ...

  • JAVA项目实战开发增删改查案例(一)前后端项目分离

    随着目前java技术的迭代更新,每天我们需要去更新新的技术,同时也要去整合旧的知识体系,目前这套实战开发采用2019年最流行的前后端工程开发,如果你工作了几年你也可以作为参考,如果你是小白这套实战适合 ...

  • Java中的无限层级递归树前后端操作解决方案

    大家好,我是小编LRyab,公众号LRyab博客网,LRyab博客网是分享一些个人成长.思考方向.个人感悟.职业规划,博客涵盖java技术 vue. html. css.前端技术spring全家桶. ...

  • java后端使用while死循环设计轮询线程提升性能

    大家好,我是小编LRyab,公众号LRyab博客网,LRyab博客网是分享一些个人成长.思考方向.个人感悟.职业规划,博客涵盖java技术 vue. html. css.前端技术spring全家桶. ...

  • 开源的Java后端通用型项目,值得收藏!

    嗨喽!Java后端编程的各位小伙伴们,由于公众号做了乱序推送改版,为了保证公众号的推文能够第一时间及时送达到大家手上,大家记得将公众号 加星标置顶 ,公众号每天会送上Java技术干货推文 ! 上篇推文 ...

  • Java后端编程技术微信群和QQ群

    今天特意写一篇文章来创建个氛围良好的程序员技术交流群.如果你喜欢在QQ群里讨论,可以加程序员技术交流QQ群:882985475 . 如果你已经卸载了QQ了,那么你可以添加下面小助手微信,备注:加群.会 ...

  • 微信小程序后端开发(Java)笔记【Springboot+Mybatis】

    前言: 因为是第一次真正接触后端开发,从编码到部署服务器到上线,所以做个笔记,也供和我一样的开发小白一些参考. 一.前期工作:开发环境与工具: 1. 编程语言:Java    #笔者还没学PHP,只想 ...

  • JAVA多线程学习笔记整理

    多线程: 三种创建方法 继承Thread类,以线程运行内容重写run方法,创建Thread对象并用start方法启动该线程. (匿名内部类) (Lambda表达式) 实现Runable接口,以线程运行 ...

  • 为什么要选择学习Java?适合零基础的初学者的文章

    我经常收到这样的问题:"要学习的第一门编程语言是什么?" Java是一门好的编程语言吗?"和" Java是适合初学者的好的第一门编程语言,还是我应该从Java或 ...