Bean Validation

Springboot集成BeanValidation扩展二:加载jar中的资源文件

痴心易碎 提交于 2020-04-25 05:37:50
一、需求 今天在搭建Springboot框架的时候,又遇到一个需求:在多模块系统中,有些模块想自己管理BeanValidation的资源文件(默认是启动项目claspath下的 ValidationMessages.properties)。刚开始还天真地认为springboot会不会帮我们做了,结果并没有,于是就是撸源码了。 以下是我的实现和实现原理 二、实现 @Configuration public class MyWebMvcConfigurer implements WebMvcConfigurer { /** * 当有异常时返回默认的验证器 * @return 返回的是org.springframework.validation.Validator,不是javax.validation.Validator * 所以返回时要适配一下 */ @Override public Validator getValidator() { //路径匹配 PathMatchingResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver( MyWebMvcConfigurer.class.getClassLoader()); try { //匹配属性文件,有个限制

SpringBoot 使用 JSR303 自定义校验注解

谁都会走 提交于 2020-04-09 12:31:55
JSR303 是 Java EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是hibernate Validator,有了它,我们可以在实体类的字段上标注不同的注解实现对数据的校验,不用 if-else 判断,简化了我们的开发,而且可读性也很好。 但有时候它提供的注解并不能满足我们的要求,比如,我们要求字段 color 必须是「red,blue,yellow」这三个值之一,这时候,我们就需要自己写判断的逻辑了,你可以自定义一个方法在其他地方进行判断,但既然用了 JSR303,为了统一代码,可以自定义校验注解。 1、给字段 color 上标注自定义注解 @ListValue ,写上这几个值 @ListValue(vals = {"red", "blue", "yellow"}) private String color; 2、创建注解 @ListValue ,可以参考官方的注解,比如 @NotNull ,我们只需要修改下面注释的几处即可 //自定义的约束校验器 @Constraint(validatedBy = {ListValueConstraintValidator.class}) @Documented @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}

Spring Boot validator参数验证restful自定义错误码响应

◇◆丶佛笑我妖孽 提交于 2020-02-29 02:43:50
关于spring web应用中关于如何使用 Bean Validation API 和hibernate-validator的文章已经很多,本文就不再重复叙述,今天要介绍的重点是在SpringBoot restful服务中如何根据不同验证错误响应不同的自定义错误码。下面直接上代码。 一、定义restful统一结果返回 阿里java开发手册中定义的一段参考【“对于公司外的 http/api 开放接口必须使用“错误码”; 而应用内部推荐异常抛出;跨应用间 RPC 调用优先考虑使用 Result 方式,封装 isSuccess()方法、 “错误码”、 “错误简短信息”。】。因此这里也定义个返回结构。 public class CommonResult<T> implements Serializable { /** * serialVersionUID:. */ private static final long serialVersionUID = -7268040542410707954L; /** * 是否成功 */ private boolean success = false; /** * 返回信息 */ private String message; /** * 装在数据 */ private T data; /** * 错误代码 */ private String code

【统一全局异常处理】4. 服务端数据校验与全局异常处理

烂漫一生 提交于 2019-12-26 12:15:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 通常,服务端的数据校验通常不是面向用户的,提示信息还是应该以面向程序员和运维人员为主,在数据进入后台之前进行一道拦截。前端js的数据校验提示信息,是面向用户的,要更加的友好! 一、异常校验的规范及常用注解 在web开发时,对于请求参数,一般上都需要进行参数合法性校验的,原先的写法时一个个字段一个个去判断,这种方式太不通用了,所以java的JSR 303: Bean Validation规范就是解决这个问题的。 JSR 303只是个规范,并没有具体的实现,目前通常都是才有hibernate-validator进行统一参数校验。 JSR303定义的校验类型 Constraint 详细信息 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @AssertFalse 被注释的元素必须为 false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @DecimalMax(value) 被注释的元素必须是一个数字

java的Bean Validation 2.0

寵の児 提交于 2019-12-21 10:59:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、什么是Bean Validation 2.0。 JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向java管理组织,JCP(Java Community Process)标准组织提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。 Bean Validation 2.0 是JSR第380号标准。标准连接如下: https://www.jcp.org/en/egc/view?id=380 二、 Bean Validation 的链接: 也就是说JSR提出了一个标准JSR #380 Bean Validation 2.0。然后hibernate-validator实现了这个标准。(类似于JDBC,然后其他厂商实现JDBC) Bean Validation的主页: http://beanvalidation.org Bean Validation的 API,标准、TCK(技术兼容包)资源: https://github.com/beanvalidation Bean Validation的参考实现: https://github.com/hibernate/hibernate

Java Bean Validation

早过忘川 提交于 2019-12-21 10:53:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在这本文中,我们将介绍使用标准框架验证Java bean的基础知识 - JSR 380,也称为Bean Validation 2.0。 当然,验证用户输入在大多数应用程序中是一个超常见的要求,Java Bean Validation框架已经成为处理这种逻辑的事实上的标准。 JSR 380 JSR 380是用于bean验证的Java API的规范,是JavaEE和JavaSE的一部分,它使用@NotNull、@Min和@Max等注释确保bean的属性满足特定的标准。 此版本需要Java 8或更高版本,并利用Java 8中添加的新功能(如类型注释),并支持Optional和LocalDate等新类型。 有关规范的完整信息,请继续阅读 JSR 380 。 依赖性 我们将使用Maven示例来显示所需的依赖项,但当然,可以使用各种方式添加这些jar。 验证API 根据JSR 380规范,validation-api依赖包含标准验证API: <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.0.Final</version> </dependency> 验证API参考实现

SpringBoot校验参数

限于喜欢 提交于 2019-12-10 14:25:45
前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的。如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量的 IF ELSE 就比如下面这样: 这个例子只是校验了一下空参数。如果需要验证邮箱格式和手机号格式校验的话代码会更多,所以介绍一下 validator 通过注解的方式进行校验参数。 什么是Validator Bean Validation是Java定义的一套基于注解的数据校验规范,目前已经从JSR 303的1.0版本升级到JSR 349的1.1版本,再到JSR 380的2.0版本(2.0完成于2017.08),已经经历了三个版本 。在 SpringBoot 中已经集成在 starter-web 中,所以无需在添加其他依赖。 注解介绍 validator内置注解 注解 详细信息 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @AssertFalse 被注释的元素必须为 false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value)

基于spring validation实现JAVA Bean Validation--数据验证功能(基于spring validation) (一) Validator包简介与validator接口

孤街浪徒 提交于 2019-12-09 15:33:17
Bean Validation-------JAVA BEAN 数据验证功能 数据验证在 Java 分层结构的应用开发中占据着重要位置。Java EE 6 提出了 Bean Validation 规范,使用注解的方式对 Java Bean 进行约束验证,不局限于某一层次或者某一编程模型,灵活易用。而今天,我们就去学习java中的数据验证功能之Bean Validation。 首先我们来介绍一下Bean Validation。 Bean是java bean,是我们抽象出来的对象。如用户对象,这个对象肯定包含很多信息,如用户名,密码,权限等等信息。在实际的开发中,用户的登录验证,权限控制等是我们不得不关注的问题。举个例子,如用户登录功能,我们不但要在前台执行验证,在服务层后台同样也需要对用户信息进行验证。如果我们每进行一次业务操作,都需要去写一段验证的代码,这样无疑是非常累赘和易出错的。 Bean Validation 规范的目标就是避免多层验证的重复性。事实上,开发者更倾向于将验证规则直接放到 Java Bean 本身,使用注解的方式进行验证规则的设计。 JSR303 规范(Bean Validation 规范)提供了对 Java EE 和 Java SE 中的 Java Bean 进行验证的方式。该规范主要使用注解的方式来实现对 Java Bean 的验证功能

hibernate和spring整合:Unable to get the default Bean Validation factory

大兔子大兔子 提交于 2019-12-09 15:02:33
在使用Spring和Hibernate进行结合的时候出现了这个问题! <prop key="javax.persistence.validation.mode">none</prop> 在hibernate配置文件中添加这个! <property name="hibernateProperties"> <props> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <!-- 关闭bean validate验证 --> <prop key="javax.persistence.validation.mode">none</prop> </props> </property> 或 <!-- 关闭bean validate验证 --> <property name="javax.persistence.validation.mode">none</property> 其实这个问题是我们自己造成的!为什么这么说?因为javaee6有bean-validator.jar这个包,用javae5就没事了,我们也可把这个包删除了

Spring Boot 2.x基础教程:JSR-303实现请求参数校验

こ雲淡風輕ζ 提交于 2019-11-30 17:58:38
请求参数的校验是很多新手开发非常容易犯错,或存在较多改进点的常见场景。比较常见的问题主要表现在以下几个方面: 仅依靠前端框架解决参数校验,缺失服务端的校验。这种情况常见于需要同时开发前后端的时候,虽然程序的正常使用不会有问题,但是开发者忽略了非正常操作。比如绕过前端程序,直接模拟客户端请求,这时候就会突然在前端预设的各种限制,直击各种数据访问接口,使得我们的系统存在安全隐患。 大量地使用 if/else 语句嵌套实现,校验逻辑晦涩难通,不利于长期维护。 所以,针对上面的问题,建议服务端开发在实现接口的时候,对于请求参数必须要有服务端校验以保障数据安全与稳定的系统运行。同时,对于参数的校验实现需要足够优雅,要满足逻辑易读、易维护的基本特点。 接下来,我们就在本篇教程中详细说说,如何优雅地实现Spring Boot服务端的请求参数校验。 JSR-303 在开始动手实践之前,我们先了解一下接下来我们将使用的一项标准规范:JSR-303 什么是JSR? JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。 JSR-303定义的是什么标准? JSR