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

【Spring】SpringBoot的10个参数验证技巧

具体用法参考下面例子: public class User { @NotNull private Long id; @NotBlank @Size(min = 2, max = 50) private...String firstName; @NotBlank @Size(min = 2, max = 50) private String lastName; @Email private String...(regexp = "[A-Z]{2}\d{4}") private String employeeId; 2 使用自定义验证注解 虽然 Spring Boot 的内置验证注释很有用,但它们可能无法涵盖所有情况...如果有特殊参数验证的场景,可以使用 Spring 的 JSR 303 验证框架创建自定义验证注释。自定义注解可以让你的的验证逻辑更具可重用性和可维护性。...4 提供有意义的错误信息 当验证失败时,必须提供清晰简洁的错误消息来描述出了什么问题以及如何修复它。 这是一个示例,如果我们有一个允许用户创建新用户的 RESTful API。

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

    瞧瞧别人家的参数校验,那叫一个优雅!

    所以,这种手写参数校验的方式,在简单场景下勉强能用,但如果业务变复杂,问题会越来越多。 那么问题来了,那有没有更优雅的方式来处理这些问题呢? 答:当然是有的。...使用注解进行参数校验 首先,定义一个用于接收用户注册参数的 DTO 对象: @Data public class UserRegistrationRequest { @NotNull(message...@NotNull(message = "密码不能为空") @Size(min = 8, message = "密码长度至少为8个字符") private String password...: @NotNull:字段不能为空; @Size:限制字符串长度; @Min 和 @Max:限制数值范围; @Email:校验邮箱格式。...; } } 2. 自定义校验注解 如果 Hibernate Validator 提供的注解不能满足需求,还可以自定义校验注解。例如,校验手机号格式。

    8300

    分组序列@GroupSequenceProvider、@GroupSequence控制数据校验顺序,解决多字段联合逻辑校验问题【享学Spring MVC】

    这也就是我们常说的多字段联合校验逻辑~ 因为这个校验的case比较常见,因此促使了我记录本文的动力,因为它会变得有意义和有价值。...name; @NotNull @Range(min = 10, max = 40) private Integer age; @NotNull @Size(min...通过使用@Valid可以实现递归验证,因此可以标注在List上,对它里面的每个对象都执行校验 ---- 问题来了,针对上例,现在我有如下需求: 若20 那么hobbies的size...需介于1和2之间 若30 那么hobbies的size需介于3和5之间 age其余值,hobbies无校验逻辑 实现方案 Hibernate Validator提供了非标准的@GroupSequenceProvider...NotNull(groups = {WhenAge20And30Group.class, WhenAge30And40Group.class}) @Size(min = 1, max = 2,

    3.8K21

    Bean Validation完结篇:你必须关注的边边角角(约束级联、自定义约束、自定义校验器、国际化失败消息...)【享学Spring】

    ,而是旨在介绍你在使用过程中不得不关心的周边、细节~ 如果说前面是用机,那么本文就有点玩机的意思~ BV(Bean Validation)的使用范围 本次再次强调了这一点(设计思想是我认为特别重要的存在...约束级联(级联校验) 如果要验证属性关联的对象,那么需要在属性上添加@Valid注解,如果一个对象被校验,那么它的所有的标注了@Valid的关联对象都会被校验,这些对象也可以是数组、集合、Map等,这时会验证他们持有的所有元素...放在类路径下,文件内容如下: // 此处可以使用占位符{value}读取注解对应属性上的值 com.fsx.my.min.message=[自定义消息]最小值必须是{value} 运行测试用例,打印输出如下失败消息..., name = "min") int min() default 0; @OverridesAttribute(constraint = Size.class, name = "max...这个时候我们有两种做法: 就在该属性上标注多个注解即可(推荐) 自定义一个注解,把这些注解封装起来,形成一个新的约束注解(使用场景相对较少) 自定义message消息可使用的变量 我们知道约束的失败消息

    1.7K20

    SpringBoot--数据校验(普通校验、分组校验)

    @Size表示一个字符串的长度或者一个集合的大小,必须在某一个范围中;min参数表示范围的下限;max参数表示范围的上限;message表示校验失败时的提示信息。...@NotNull注解表示该字段不能为空 @DecimalMin注解表示对应属性值的下限 @DecimalMax注解表示对应属性值的上限 @Email注解表示对应属性格式是一个Email 创建UserController...如果BindingResult中的haiErrors方法返回true,表示有错误信息,此时遍历错误信息,将之返回给前端 使用Postman测试: 直接访问"/user"接口: ?...{ } public interface ValidationGroup2 { } 在实体类中添加分组信息: public class User { private Integer id;...{ //@Validated(ValidationGroup2.class) 表示这里的校验使用ValidationGroup2分组的校验规则,即只校验邮箱地址是否为空、用户地址是否为空

    1.6K10

    【译】如何在 Spring 中将 @RequestParam 绑定到对象

    在许多情况下,使用 @NotBlack 替代 @NotNull 更有意义,因为它也覆盖了不希望出现的空字符串问题(长度为零的字符串)。...; @Min(1) private int limi; // ... } 需要注意的是: 仅在字段上添加验证注解还不足以使校验生效。...要校验所有嵌套属性,你应该在嵌套对象字段上添加 @Valid 注解。请注意,当嵌套对象字段为 null 时,Spring 不会验证其属性。如果所有嵌套属性都是可选的,那么这可能是预期的解决方案。...如果不是,则需在嵌套对象字段上放置 @NotNull 注解。...我希望呈现的案例是自解释的,但如果有任何疑问,或者你想发表你的看法,我强烈建议你在文章下方留下你的评论。

    60710

    SpringBoot中使用注解对实体类中的属性进行校验

    我是你们的老朋友Java学术趴。 2.5 实体类参数校验 2.5.1 验证注解介绍 SpringBoot中提供了可以给实体类上的参数加入校验,对于前端请求的数据进行校验。...常用的验证注解 注意:这来要也别注意一下 @NotNull、@NotNull、@NotBlank以及@NotEmpty注解的区别 @NotNull :传递的所有对象都不能是null,其他的不保证。...BigDecimal wage; ​ @Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验...., 因为在前端传递过来数据可能是大量的数据或者是一个对象,这样如果一个一个的手写注解验证非常的麻烦,此时就需要使用到这两个注解,这两个注解会递归的将对象中的每个实体类属性进行校验,当所有验证成功的时候才会向下执行...批量校验 :如果是 post请求的一个对象,那么此时我们需要使用 @Validated注解 进行批量校验,因为在实体类中已经给属性加入了相应的验证注解,所以他会使用递归的方式进行逐一的校验。

    5.1K21

    求求你别在用IF ELSE校验参数了

    ) @Size(max, min) 被注释的元素的大小必须在指定的范围内,可用于字符串、Collection、Map、数组等类型 @Digits (integer, fraction) 被注释的元素必须是一个数字...sex; @NotBlank(message = "姓名不能为空") @Size(min = 2,max = 5,message = "姓名长度不规范") private...进入Controller对应方法,在需要校验的对象前添加@Valid注解即可(校验对静态变量不生效),在使用 @Valid 注解的参数后可以紧跟着一个 BindingResult 类型的参数,用于获取校验结果...,抛出的异常为该类异常 //方法参数如果带有@RequestBody注解,那么spring mvc会使用RequestResponseBodyMethodProcessor //对参数进行序列化...value为null,那么该校验规则不生效;可搭配@NotNull注解使用,更加灵活 if(value == null){ return true;

    1.9K10

    求求你别在用IF ELSE校验参数了

    ) @Size(max, min) 被注释的元素的大小必须在指定的范围内,可用于字符串、Collection、Map、数组等类型 @Digits (integer, fraction) 被注释的元素必须是一个数字...sex; @NotBlank(message = "姓名不能为空") @Size(min = 2,max = 5,message = "姓名长度不规范") private...进入Controller对应方法,在需要校验的对象前添加@Valid注解即可(校验对静态变量不生效),在使用 @Valid 注解的参数后可以紧跟着一个 BindingResult 类型的参数,用于获取校验结果...,抛出的异常为该类异常 //方法参数如果带有@RequestBody注解,那么spring mvc会使用RequestResponseBodyMethodProcessor //对参数进行序列化...value为null,那么该校验规则不生效;可搭配@NotNull注解使用,更加灵活 if(value == null){ return true;

    1.8K20

    Validator,就来这一篇吧

    ) @Size(max, min) 被注释的元素的大小必须在指定的范围内,可用于字符串、Collection、Map、数组等类型 @Digits (integer, fraction) 被注释的元素必须是一个数字...sex; @NotBlank(message = "姓名不能为空") @Size(min = 2,max = 5,message = "姓名长度不规范") private...进入Controller对应方法,在需要校验的对象前添加@Valid注解即可(校验对静态变量不生效),在使用 @Valid 注解的参数后可以紧跟着一个 BindingResult 类型的参数,用于获取校验结果...,抛出的异常为该类异常 //方法参数如果带有@RequestBody注解,那么spring mvc会使用RequestResponseBodyMethodProcessor //对参数进行序列化...value为null,那么该校验规则不生效;可搭配@NotNull注解使用,更加灵活 if(value == null){ return true;

    2.7K10

    求求你别在用IF ELSE校验参数了

    ) @Size(max, min) 被注释的元素的大小必须在指定的范围内,可用于字符串、Collection、Map、数组等类型 @Digits (integer, fraction) 被注释的元素必须是一个数字...sex; @NotBlank(message = "姓名不能为空") @Size(min = 2,max = 5,message = "姓名长度不规范") private...进入Controller对应方法,在需要校验的对象前添加@Valid注解即可(校验对静态变量不生效),在使用 @Valid 注解的参数后可以紧跟着一个 BindingResult 类型的参数,用于获取校验结果...,抛出的异常为该类异常 //方法参数如果带有@RequestBody注解,那么spring mvc会使用RequestResponseBodyMethodProcessor //对参数进行序列化...value为null,那么该校验规则不生效;可搭配@NotNull注解使用,更加灵活 if(value == null){ return true;

    1.7K20

    Java Bean Validation的使用

    Spring Web项目中需要校验参数的正确性,JSR 303是其规范,hibernate-validator是该规范的一个实现,使用他可以实现统一的参数校验 添加依赖 因为在Spring Boot...@Max @Length等规则都是在字段不为Null的时候校验,如果字段为Null,则不使用这种规则。...如果一定要满足,则还需要添加规则@NotNull Controller中校验规则 添加注解@Valid @Slf4j @SpringBootApplication @RestController...* @Size(min= , max= )集合的元素数量必须在min和max之间 * @CreditCardNumber(ignoreNoDigitCharacters=) 字符串必须是信用卡的卡号...* @Min 值必须大于等于value 指定的值,不能注解在字符串类型的属性上 */ 如果这些校验注解不满要求,还可以添加自定义注解,比如@Idcard 参考 Validation

    84130

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

    ① 首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于Girl类中的属性): @Min(value = 18,message = "未成年禁止入内")...private Integer age; ② 其次在controller层的方法的要校验的参数上添加@Valid注解,并且需要传入BindingResult对象,用于获取校验失败情况下的反馈信息,如下代码...hibernate validation的时候使用 @Validated 是只用spring  Validator 校验机制使用\ 2.实现 其中,@valid,java的jsr303声明了这类接口,hibernate-validator..., 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验....用在String上面 @NotNull    用在基本类型上 如果在基本类型上面用NotEmpty或者NotBlank 会出现上面的错

    5.4K10

    使用hibernate validate做参数校验

    ; return response; } 但是当接口参数很多,并且参数校验很负责的时候,如果继续使用这种校验的方式,校验代码会非常多,并且难以维护。...那么在这种情况下可以考虑使用hibernate validate做参数校验。...2.hibernate validate简介 hibernate validate是基于注解来实现的参数校验框架,并且有很好的扩展性,使用者可以通过自定义约束条件来实现自定义的校验条件。...以下为添加注解的一个小例子: public class Car { @NotNull private String manufacturer; @NotNull @Size(...10位之前 以上例子中的注解比较简单,通过添加 @NotBlank(message = "商品名称不能为空") @Size(min = 2, max = 10, message = "税号长度必须在2到

    93920

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

    不能为null Null 必须为 null Pattern(value) 被注释的元素必须符合指定的正则表达式 Size(max, min) 检查该字段的size是否在min和max之间,可以是字符串...@Valid,那么每个@Valid后面跟着的BindingResult就是这个@Valid的验证结果,顺序不能乱,如果有多个@Valid,那么需要多个BindingResult来保存校验结果,首先我们需要在我们的实体上定义校验规则...嵌套验证 表示一个校验实体中还嵌套者另一个待校验实体,需要同时对他们进行校验 分组校验 添加校验注解的方式固然是方便的,但是如果一个实体对象在不同的业务中的校验规则不同的话,难道我们需要编写两个...,在API接收数据时添加@Valid注解,这时你的实体将会开启一个校验的功能。...总结 通过该篇文章,我们讲解了hibernate的常见校验注解的使用、hibernate的两种校验模式的区别和配置实现、hibernate的分组校验规则、详细说明了@Validated和@Valid注解的区别以及使用

    13.6K72
    领券