Hibernate Validator

自定义注解!绝对是程序员装大佬的利器!!

匆匆过客 提交于 2020-11-22 09:50:31
作者 l Hollis 来源 l Hollis(ID:hollischuang) 相信很多人对Java中的注解都很熟悉,比如我们经常会用到的一些如@Override、@Autowired、@Service等,这些都是JDK或者诸如Spring这类框架给我们提供的。 在以往的面试过程中,我发现,关于注解的知识很多程序员都仅仅停留在使用的层面上,很少有人知道注解是如何实现的,更别提使用自定义注解来解决实际问题了。 但是其实,我觉得一个好的程序员的标准就是懂得如何优化自己的代码,那在代码优化上面,如何精简代码,去掉重复代码就是一个至关重要的话题,在这个话题领域,自定义注解绝对可以算得上是一个大大的功臣。 所以, 在我看来,会使用自定义注解 ≈ 好的程序员。 那么,本文,就来介绍几个,作者在开发中实际用到的几个例子,向你介绍下如何使用注解来提升你代码的逼格。 基本知识 在Java中,注解分为两种,元注解和自定义注解。 很多人误以为自定义注解就是开发者自己定义的,而其它框架提供的不算,但是其实上面我们提到的那几个注解其实都是自定义注解。 关于"元"这个描述,在编程世界里面有都很多,比如"元注解"、"元数据"、"元类"、"元表"等等,这里的"元"其实都是从meta翻译过来的。 一般我们把 元注解理解为描述注解的注解,元数据理解为描述数据的数据,元类理解为描述类的类 … 所以,在Java中

4. Validator校验器的五大核心组件,一个都不能少

杀马特。学长 韩版系。学妹 提交于 2020-10-29 10:53:55
> 困难是弹簧,你弱它就强。本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈、MyBatis、JVM、中间件等小而美的 专栏 供以免费学习。 ✍前言 你好,我是YourBatman。 上篇文章 介绍了校验器上下文ValidatorContext,知道它可以对校验器Validator的核心五大组件分别进行定制化设置,那么这些核心组件在校验过程中到底扮演着什么样的角色呢,本文一探究竟。 作为核心组件,是有必要多探究一分的。以此为基,再扩散开了解和使用其它功能模块便将如鱼得水。但是过程枯燥是真的,所以需要坚持呀。 版本约定 Bean Validation版本: 2.0.2 Hibernate Validator版本: 6.1.5.Final ✍正文 Bean Validation校验器的这五大核心组件通过ValidatorContext可以分别设置:若没设置(或为null),那就回退到使用ValidatorFactory默认的组件。 准备好的组件,统一通过ValidatorFactory暴露出来予以访问: public interface ValidatorFactory extends AutoCloseable { . . . MessageInterpolator getMessageInterpolator ( ) ;

SpringBoot整合Hibernate Validator实现参数验证功能

♀尐吖头ヾ 提交于 2020-10-26 23:18:10
  在前后端分离的开发模式中,后端对前端传入的参数的校验成了必不可少的一个环节。但是在多参数的情况下,在controller层加上参数验证,会显得特别臃肿,并且会有许多的重复代码。这里可以引用Hibernate Validator来解决这个问题,直接在实体类进行参数校验,验证失败直接返回错误信息给前端,减少controller层的代码量。 一、xml引入Hibernate Validator <!-- 验证器 --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.5.Final</version> </dependency> 二、通过注解在实体类进行参数校验 @Data public class UserModel { @NotNull(message = "用户名称不能为空!" ) private String userName; @NotNull(message = "age不能为null!" ) @Range(min = 1, max = 888, message = "范围为1至888" ) private Integer age; /** * 日期格式化转换 */ @NotNull

1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知

不羁的心 提交于 2020-10-03 04:58:37
乔丹是我听过的篮球之神,科比是我亲眼见过的篮球之神。本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈、MyBatis、JVM、中间件等小而美的 专栏 供以免费学习。关注公众号【 BAT的乌托邦 】逐个击破,深入掌握,拒绝浅尝辄止。 ✍前言 你好,我是YourBatman。 作为一个开发者,聊起数据校验(Bean Validation),不管是前、中、后端都耳熟能详,并且心里暗爽:so easy。 的确,对数据做校验是一个程序员的基本素质,它不难但发生在我们程序的几乎每个角落,就像下面这幅图所示: 每一层都需要做校验 。 如果你真的这么去写代码的话(每一层都写一份),肯定是不太合适的,良好的状态应该如下图所示: 作为一个Java开发者,在Spring大行其道的今天,很多小伙伴了解数据校验来自于 Spring MVC 场景,甚至 止步于此 。殊不知,Java EE早已把它抽象成了JSR标准技术,并且Spring还是借助整合它完成了自我救赎呢。 在我看来,按 Spring的3C战略 标准来比,Bean Validation数据校验这块是没有能够完成对传统Java EE的超越,自身设计存在过重、过度设计等特点。 本专栏命名为Bean Validation(数据校验),将先从JSR标准开始,再逐渐深入到具体实现Hibernate

《SpringBoot判空处理》揭开@Valid与@Validated的面纱

旧街凉风 提交于 2020-08-19 17:42:28
一、事有起因   我们在与前端交互的时候,一般会遇到字段格式校验及非空非null的校验,在没有SpringBoot注解的时候, 我们可能会在service进行处理: if ( null == name){ throw new BizException("-1", "用户名不能用空" ); }   要是有20个字段需要插入,那我们岂不需要书写20遍这样的代码,当然这种事最直接的解决方式,但作为程序员,我们 首要的任务是要能完成需求到代码的转化,同时还要不断思考如何更加丝滑的写代码,不要重复造轮子。在进入正题之前我们 先认识以下3位老朋友: entity 用于抽象数据库中的字段,不断任何处理 dto/vo/bean 作为前端数据与数据库的桥梁,一般我们是一个接口,一个dto,我们的判空也是需要结合dto处理 controller 用于接受前端的请求,我们的判空也是在controller层进行的   就此我们正式的开始探索Valid与Validated的旅程 二、判空逻辑的具体实现 2.1、使用的包及注解 2.2、注解的含义 @Null              被注释的元素必须为 null @NotNull          被注释的元素必须不为 null @AssertTrue         被注释的元素必须为 true @AssertFalse         被注释的元素必须为

Spring-Validation(后端数据校验) 你值得拥有

拜拜、爱过 提交于 2020-08-13 05:45:18
前言 最近看到很多童鞋在项目中的对请求参数的校验都用的if来判断各参数的属性,如: if (StringUtils.isBlank(username)){ return RR.exception("账号不能为空" ); } if (StringUtils.isBlank(password)){ return RR.exception("密码不能为空" ); } if (StringUtils.isBlank(realName)){ return RR.exception("姓名不能为空" ); } ...... 每个参数都需要这样一个个去校验null,返回对应信息,代码就像叠罗汉一样~~,在此,楼主强烈推荐一个神器:Validation,有了它,再也不用这样去校验参数啦,可以让我们在项目中不用太关注其他东西,专注于业务逻辑的编写。 引入核心依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 使用示例-添加用户 需要校验的实体类,在此使用了一些常用的校验注解,基本上能够见名知意,每个注解中都有message属性,就是校验不通过后的提示信息 @Data @AllArgsConstructor

Spring Boot 如何做参数校验?

本小妞迷上赌 提交于 2020-08-13 03:57:41
作者:狂乱的贵公子 cnblogs.com/cjsblog/p/8946768.html 1、背景介绍 开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码。 这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。 接下来,用Validation来改写这段。 2、Spring Boot文档中的Validation 在Spring Boot的官网中,关于Validation只是简单的提了一句,如下 其实, Spring Validator 和 Hibernate Validator 是两套Validator,可以混着用,这里我们用**Hibernate Validator。**在Java技术栈微信公众号后台回复关键字: boot ,可以获取更多栈长整理的 Spring Boot 系列技术干货。 3、Hibernate Validator https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface 4、Spring Validator https://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/core.html#validation 5、示例 5.1

Spring Boot 参数校验

纵饮孤独 提交于 2020-07-29 06:31:24
1、背景介绍 开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码 这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已。 接下来,用Validation来改写这段 2、Spring Boot文档中的Validation 在Spring Boot的官网中,关于Validation只是简单的提了一句,如下 其实, Spring Validator 和 Hibernate Validator 是两套Validator,可以混着用,这里我们用 Hibernate Validator 3、Hibernate Validator https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface 4、Spring Validator https://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/core.html#validation 5、示例 5.1、引入spring-boot-starter-validation 5.2、定义一个对象 5.3、适用@Valid校验,并将校验结果放到BindingResult对象中 注意: 默认情况下,如果校验失败会抛javax

springmvc参数校验(二)

情到浓时终转凉″ 提交于 2020-05-08 05:34:03
一、PathVariable 校验 在定义 Restful 风格的接口时,通常会采用 PathVariable 指定关键业务参数,如下: @GetMapping( "/path/{group:[a-zA-Z0-9_]+}/{userid}") @ResponseBody public String path(@PathVariable( "group") String group, @PathVariable( "userid") Integer userid) { return group + ":" + userid; } {group:[a-zA-Z0-9_]+} 这样的表达式指定了 group 必须是以大小写字母、数字或下划线组成的字符串。 我们试着访问一个错误的路径: GET /path/testIllegal. get/ 10000 此时会得到 404 的响应,因此对于PathVariable 仅由正则表达式可达到校验的目的 二、方法参数校验 类似前面的例子,大多数情况下,我们都会直接将HTTP请求参数映射到方法参数上。 @GetMapping( "/param") @ResponseBody public String param(@RequestParam( "group")@Email String group, @RequestParam( "userid")

SpringBoot 参数校验的方法

ぐ巨炮叔叔 提交于 2020-05-08 03:58:11
Introduction 有参数传递的地方都少不了参数校验。在web开发中,前端的参数校验是为了用户体验,后端的参数校验是为了安全。试想一下,如果在controller层中没有经过任何校验的参数通过service层、dao层一路来到了数据库就可能导致严重的后果,最好的结果是查不出数据,严重一点就是报错,如果这些没有被校验的参数中包含了恶意代码,那就可能导致更严重的后果。 这里我们主要介绍在springboot中的几种参数校验方式。常用的用于参数校验的注解如下: @AssertFalse 所注解的元素必须是Boolean类型,且值为false @AssertTrue 所注解的元素必须是Boolean类型,且值为true @DecimalMax 所注解的元素必须是数字,且值小于等于给定的值 @DecimalMin 所注解的元素必须是数字,且值大于等于给定的值 @Digits 所注解的元素必须是数字,且值必须是指定的位数 @Future 所注解的元素必须是将来某个日期 @Max 所注解的元素必须是数字,且值小于等于给定的值 @Min 所注解的元素必须是数字,且值小于等于给定的值 @Range 所注解的元素需在指定范围区间内 @NotNull 所注解的元素值不能为null @NotBlank 所注解的元素值有内容 @Null 所注解的元素值为null @Past