首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何实现Java后端数据校验?看这篇就足够!

官网地址:http://hibernate.org/validator/ 常见注解 注解 用途 Valid 递归的对关联的对象进行校验 AssertFalse 用于boolean字段,该字段的值只能为false...嵌套验证 表示一个校验实体中还嵌套者另一个待校验实体,需要同时对他们进行校验 分组校验 添加校验注解的方式固然是方便的,但是如果一个实体对象在不同的业务中的校验规则不同的话,难道我们需要编写两个...顾名思义,嵌套验证就是一个实体中的属性包含其他实体,在对当前实体做校验的同时,还要对其属性的实体进行嵌套验证,比如,我们现在有一个实体CreateRoomInfoVO,通过Java+Hibernate校验...在上图中,如果CreateRoomInfoVO实体的objectVOList属性额外加注释,只有@NotNull,无论入参采用@Validated还是@Valid验证,从返回知道,我们传vipLevel...@Validated或@Valid来进行嵌套验证,也就是需要在嵌套校验的实体上加上注解@Valid,修改代码如下: 修改CreateRoomInfo类如下: @JsonInclude(JsonInclude.Include.NON_NULL

13.1K72
您找到你想要的搜索结果了吗?
是的
没有找到

参数校验这样写,就不会被辞退了。

看着这个裸奔的接口,leader把二胖叫了过去,语重心长的跟二胖说道:"你这个参数校验写写吗?不怕人家攻击你的接口吗?这里校验,直接用,不怕引入sql注入吗?这里校验下邮箱是否符合格式吗?...配置切面啥的都比较简单,稍微复杂的就是反射解析参数了,因为要涉及到请求参数的嵌套结构。二胖习惯性的面向百度编程能copy别人的代码坚决不去自己写。...百度出来的基本上都是单层结构,简单基本类型的对象,没有涉及到是嵌套、级联的类型的情趣参数。最后在github(全球最大的同性交友网站)找了一圈也没有找到合适的。...//被注释的元素,值必须是一个字符串,不能为null,且调用trim()后,长度必须大于0 @NotBlank(message = "") //被注释的元素,值不能为null,但可以为"空",用于基本数据类型的非空校验上...,而且被其标注的字段可以使用 @size、@Max、@Min 等对字段数值进行大小的控制 @NotNull(message = "") //被注释的的元素,值不能为null,且长度必须大于0,一般用在集合类上面

61800

二胖写参数校验的坎坷之路

看着这个裸奔的接口,leader把二胖叫了过去,语重心长的跟二胖说道:"你这个参数校验写写吗?不怕人家攻击你的接口吗?这里校验,直接用,不怕引入sql注入吗?这里校验下邮箱是否符合格式吗?...配置切面啥的都比较简单,稍微复杂的就是反射解析参数了,因为要涉及到请求参数的嵌套结构。二胖习惯性的面向百度编程能copy别人的代码坚决不去自己写。...百度出来的基本上都是单层结构,简单基本类型的对象,没有涉及到是嵌套、级联的类型的参数。最后在github(全球最大的同性交友网站)找了一圈也没有找到合适的。...//被注释的元素,值必须是一个字符串,不能为null,且调用trim()后,长度必须大于0 @NotBlank(message = "") //被注释的元素,值不能为null,但可以为"空",用于基本数据类型的非空校验上...,而且被其标注的字段可以使用 @size、@Max、@Min 等对字段数值进行大小的控制 @NotNull(message = "") //被注释的的元素,值不能为null,且长度必须大于0,一般用在集合类上面

37820

阿里华为等大厂架构师如何解决空指针问题

使用Hibernate的**@DynamicUpdate**注解实现更新SQL的动态生成,实现只更新修改后的字段,不过需要先查询一次实体,让Hibernate可以“跟踪”实体属性的当前状态,以确保有效。...参数校验: 对传入的UserDTO和ID属性先判空,若为空,抛IllegalArgumentException 根据id从DB查询出实体后判空,若为空,抛IllegalArgumentException...如果传值,那么Optional本身为null,直接跳过Entity字段的更新即可,这样动态生成的SQL就不会包含这个;如果传了值,那么进一步判断传的是不是null。...() == null) throw new IllegalArgumentException("用户Id能为空"); UserEntity userEntity = userEntityRepository.findById...定义个实体 程序启动时,往实体初始化一条数据,其id是自增列自动设置的1,score是NULL: 然后,测试下面三个用例,来看看结合数据库中的null值可能会出现的坑: 通过sum函数统计一个只有

1.1K30

SpringBoot整合JSR303实现参数校验

嵌套校验简单的解释就是一个实体中包含另外一个实体,并且这两个或者多个实体都需要校验。...举个栗子:文章可以有一个或者多个分类,作者在提交文章的时候必须指定文章分类,而分类是单独一个实体,有分类ID、名称等等。...嵌套校验很简单,只需要在嵌套实体属性标注@Valid注解,则其中的属性也将会得到校验,否则不会校验。...如下文章分类实体类校验: /** * 文章分类 */ @Data public class CategoryDTO { @NotNull(message = "分类ID能为空")...嵌套校验针对分组查询仍然生效,如果嵌套实体类(比如CategoryDTO)中的校验的属性和接口中@Validated注解指定的分组不同,则不会校验。

2.8K22

JavaBean基于注解实现校验

直接上干货,带你们一起实验是使用org.hibernate.validator.constraints包下的注解。 首先定义一个实体类,属性分别用了校验注解,分别进行触发。...import org.hibernate.validator.constraints.NotBlank; import org.hibernate.validator.constraints.NotEmpty...中某个字段,即嵌套校验,必须要在第一个bean对象中使用@Valid标注到表示第二个bean对象的字段上,然后再第二个bean对象里面的字段上加上校验类型. 7....@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上 下面是我总结的所有参数校验注解的使用规则方法 空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null,...@NotEmpty 检查约束元素是否为NULL或者是EMPTY.

1K20

jpaspringdata(1)jpa

,主键id的描述,在hibernate中,以及mybatis中的resultmap的都是描述为id标签, 这里获取主键的方式有IDENTITY:采用数据库 ID自增长的方式来自增主键段,Oracle 不支持这种方式...(name="ID_GENERATOR", //与generator="ID_GENERATOR"的值一致     table="jpa_id_generators", //数据库表的名称,这里是三...,id,PK_NAME,PK_VALUE     pkColumnName="PK_NAME",//数据库表的对应的的名称     pkColumnValue="CUSTOMER_ID",//向对应列的名称的值...    valueColumnName="PK_VALUE",//数据库表的对应的的名称     allocationSize=100)//这里设置的值,PK_VALUE设置为100,每次id自增100...", referencedColumnName="ID")},//joinColumns 映射当前类所在的表在中间表中的外键,name 指定外键的列名, referencedColumnName 指定外键关联当前表的哪一

1.9K20

【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)

用于验证对象为null @NotNull 用于对象不能为null,无法查检长度为0的字符串 @NotBlank 只用于String类型上,不能为null且trim()之后的size>0 @NotEmpty...用于集合类、String类不能为null,且size>0。...需求 我们在做校验的时候,通常会遇到一个实体类的添加和修改,他们的校验规则是不同的,所以分组显得尤为重要。他可以帮助我们少建一个冗余的实体类,所以我们必须要会的。 2....在需要二义性的字段上添加分组 /** * 品牌id */ @NotNull(message = "修改必须有品牌id",groups = {EditGroup.class}) @Null(message...实体类添加一个新的校验属性 ==注意==:我们上面做了分组,如果属性指定分组,则不会生效,现在我们的部分属性校验已没有起作用,现在只有brandId和showStatus起作用。

65220

Spring Data开发手册|Java持久化API(JPA)需要了解到什么程度呢?

@Entity:表示的是当前的实体是一个持久化的实体 @Id:这个表示当前的属性是一个主键 @GeneratedValue:主键的生成策略 strategy=GenerationType.IDENTITY...Name:名字 Length:表示的是字段的长度 nullable=false:这个表示的是不能为null unique=true:是否是唯一的 @Transient :当前字段在数据库中不对应列 @...这个映射下面对象中的这个Id private People people; } 声明People类: @Entity @Table public class People { @Id @GeneratedValue...clear:表示的是清楚内存和数据库数据的对应的关系 删除状态: 当前对象close之后的对象的这种状态,就称为删除状态 注意事项 表名写默认就是类作为表名 column写,表的列名就是类的属性名...@GeneratedValue后面值写默认是auto 结语 JPA是我们开发中离不开的经常用到的技术,其涉及的技术和知识面其实远不止上面列出的这些。

1.3K30

如何完美解决 `could not execute statement; SQL ; nested exception is org.hibernate.exception.SQLGramm

可能原因和解决方案 2.1 实体类与数据库表字段匹配 2.2 数据库约束冲突 2.3 数据库架构变化 2.4 SQL 语法错误 3....可能原因和解决方案 2.1 实体类与数据库表字段匹配 如果实体类与数据库表的字段定义不一致,可能导致 SQL 无法执行。...例如: 字段类型匹配(例如,实体类中的 Long 类型映射到数据库的 String 类型)。 字段名称拼写错误。 缺少映射关系。 解决方案: 确保实体类和数据库表的字段名称和数据类型一致。...2.3 数据库架构变化 在数据库架构变更后,如果没有及时同步更新实体类或相关代码,可能导致 SQL 与数据库匹配。 解决方案: 检查数据库架构是否变更。...QA 环节 Q1:我的实体类和数据库字段完全匹配,但仍然报错? A:确保实体类的字段与数据库表的类型完全兼容,比如 String 对应 VARCHAR 或 TEXT 类型。

46710

MyBatis迷信者,清醒点!

十多年前,Hibernate如火如荼时,初中级开发者高呼:有了Hibernate,就不再需要JDBC、iBatis(后更名为MyBatis)了;现在,又换了另一波初中级开发者高呼:Hibernate已死...男', '喜欢购物', NULL, NULL, NULL, 2, NULL, '顾客'); 本例需要执行的业务查询如下: // 加载id为4的Employee Employee emp2 = (Employee...Hibernate的解决方案 Hibernate默认采用一张表来保存整个继承树的所有记录,因此开发者只要为这些实体定义合适的关联、继承映射即可。 下面是Person类的注解。...=DiscriminatorType.STRING) // 指定Person实体对应的记录在辨别者的值为"普通人" @DiscriminatorValue("普通人") @Table(name="person_inf...接下来@DiscriminatorValue("普通人")指定Person实体在辨别者中保存”普通人“(此处也可使用整数)。

82030

@Valid注解的使用---SpringMvc中的校验框架@valid和@validation的概念及相关使用

① 首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于Girl类中的属性): @Min(value = 18,message = "未成年禁止入内")...Date 和 Calendar 对象是否在当前时间之后 @Pattern 验证 String 对象是否符合正则表达式的规则 数值检查,建议使用在Stirng,Integer类型,建议使用在...;//Id @NotNull(message = "appId不能为空", groups = {AccountGroup.Update.class}) private Integer appId;//...应用id @NotEmpty(message = "规则不能为空", groups = {AppConfigGroup.Add.class,AppConfigGroup.Update.class})...; } public void setId(Integer id) { this.id = id; } public Integer getAppId() { return appId; }

1.4K10

Java面试宝典4.0版

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):  该语句添加一个主键,这意味着索引值必须是唯一的,且不能为 NULL 。...通常需要为表加上一个,以存储各个实例的惟 一标识。这个惟一属性被称为主关键字或主键。 第二范式( 2NF )要求实体的属性完全依赖于主关键字。...2.4hibernate 常用注解 @entity :声明实体 bean ,每一个持久化 POJO 类都是一个实体 bean, 这可以通过在类的定 义中使用 @Entity 注解来进行声明 : @Id...:注解则声明了该实体 bean 的标识属性,对应相应表使用 id 列作为主键 @Table : 是 类 一 级 的 注 解 , 通 过 @Table 注 解 可 以 为 实 体 bean 映 射 指...如果没有定义 @Table, 那么系统自动使用默认值:实体的短类名 ( 附带包名 ).

1.1K40

JPAHibernate问题汇总

懒加载导致的N + 1问题 Hibernate的懒加载有个让人诟病的问题,就是所谓的N + 1问题:如果一个实体里存在一个懒加载的集合对象,在查询该实体时,会发出一条SQL。...于是当一个事务方法A去调用了另一个事务方法B时,指明事务传播级别,那么事务方法B依然使用方法A的事务。...但是,JPA默认实现是Hibernate,而Hibernate不提供事务嵌套。...如果直接把下述SQL去PostgreSQL 12查询,是不会报错的: 1 SELECT * from tb_test test where test.domain_id = null; 这里报错是因为...; 解决这个问题,需要处理参数值是null的情况,由于业务需求,这个参数值不能为null,我需要在参数值不为null时才能调用这个方法,这样就不会触发这个问题。

2.4K20
领券