Springboot @Validated注解详细说明

这篇具有很好参考价值的文章主要介绍了Springboot @Validated注解详细说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Spring Boot中,@Validated注解用于验证请求参数。它可以应用在Controller类或方法上

1、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2、参数说明与使用示例

注解 验证的数据类型 描述
@NotNull 任意类型 验证属性不能为null
@NotBlank 字符串 验证字符串属性不能为空且长度必须大于0
@Size(min,max ) CharSequence
Collection
Map
Array
字符串:字符串长度必须在指定的范围内
Collection:集合大小必须在指定的范围内
Map:map的大小必须在指定的范围内
Array:数组长度必须在指定的范围内
@Min 整型类型 验证数字属性的最小值
@Max 整型类型 验证数字属性的最大值
@DecimalMin 数字类型 验证数字属性的最小值(包括小数)
@DecimalMax 数字类型 验证数字属性的最大值(包括小数)
@Digits(integer,fraction) 数字类型 验证数字属性的整数位数和小数位数
@Email 字符串类型 验证字符串属性是否符合Email格式
@Pattern 字符串 验证字符串属性是否符合指定的正则表达式
@Positive 数字类型 验证数值为正数
@PositiveOrZero 数字类型 验证数值为正数或0
@Negative 数字类型 验证数值为负数
@NegativeOrZero 数字类型 验证数值为负数或0
@AssertTrue 布尔类型 参数值必须为 true
@AssertFalse 布尔类型 参数值必须为 false
@Past 时间类型(Date) 参数值为时间,且必须小于 当前时间
@PastOrPresent 时间类型(Date) 参数值为时间,且必须小于或等于 当前时间
@Future 时间类型(Date) 参数值为时间,且必须大于 当前时间
@FutureOrPresent 时间类型(Date) 参数值为时间,且必须大于或等于 当前日期
@Data
public class User {
    // @NotNull:验证属性不能为null。
    @NotNull(message = "用户名不能为null")
    private String username;

    // @NotBlank:验证字符串属性不能为空且长度必须大于0。
    @NotBlank(message = "用户名不能为空且长度必须大于0")
    private String username1;

    // @Size:验证字符串属性的长度范围。
    @Size(min = 6, max = 20,message = "密码最小6位,最长20位")
    private String password;

    // @Min:验证数字属性的最小值。
    @Min(value = 18,message = "年龄最小18岁")
    private int age;

    // @Max:验证数字属性的最大值。
    @Max(100)
    private int age1;

    // @DecimalMin:验证数字属性的最小值(包括小数)。
    @DecimalMin("0.01")
    private BigDecimal price;

    // @DecimalMax:验证数字属性的最大值(包括小数)。
    @DecimalMax("1000.00")
    private BigDecimal price1;

    // @Digits:验证数字属性的整数位数和小数位数。
    @Digits(integer = 3, fraction = 2)
    private BigDecimal weight;

    // @Email:验证字符串属性是否符合Email格式。
    @Email
    private String email;

    // @Pattern:验证字符串属性是否符合指定的正则表达式。
    @Pattern(regexp = "[A-Za-z0-9]+")
    private String username2;
    
    // @Positive:验证数值为正数
    @Positive
    private int age2;

    // @PositiveOrZero:验证数值为正数或0
    @PositiveOrZero
    private int age3;

    // @Negative:验证数值为负数
    @Negative
    private int age4;

    // @NegativeOrZero:验证数值为负数或0
    @NegativeOrZero
    private int age5;

    // @AssertTrue:参数值必须为 true
    @AssertTrue
    private boolean hasMoney;

    // @AssertFalse:参数值必须为 false
    @AssertFalse
    private boolean hasMoney1;

    // @Past:参数值为时间,且必须小于 当前时间
    @Past
    private Date time;

    // @PastOrPresent:参数值为时间,且必须小于或等于 当前时间
    @PastOrPresent
    private Date time1;

    // @Future:参数值为时间,且必须大于 当前时间
    @Future
    private Date time2;

    // @FutureOrPresent:参数值为时间,且必须大于或等于 当前日期
    @FutureOrPresent
    private Date time3;
}

嵌套校验:

在被检验的字段上添加 @Valid 注解就可以实现嵌套检验

@Data
public class User3 {
    @Valid
    List<User2> user2List;

    @Valid
    private User2 user2;
}

@Data
 class User2 {
    @NotBlank(message = "用户名不能为空!")
    private String username;
}

3、校验注解的三个参数:

Springboot @Validated注解详细说明,spring boot,spring boot,java

  • message:自定义错误消息。可以通过该参数指定验证失败时返回的错误消息。
    示例:
public class User {
    @NotBlank(message = "用户名不能为空")
    private String username;
    
    // getter and setter
}
  • groups:分组校验。可以通过该参数指定在特定的验证分组中才进行验证。
    示例:
public interface Group1 {}

public interface Group2 {}

public class User {
    @NotBlank(groups = Group1.class)
    private String username;
    
    @NotBlank(groups = Group2.class)
    private String password;
    
    // getter and setter
}

username属性只在Group1分组中进行验证,password属性只在Group2分组中进行验证。

  • payload:用于携带额外的验证信息。可以通过该参数传递一些自定义的验证信息。(不常用)
    示例:
public class User {
    @NotBlank(payload = {ValidationInfo.class})
    private String username;
    
    // getter and setter
}

public class ValidationInfo {
    private String info;
    
    // getter and setter
}

当验证失败时,可以通过ConstraintViolation对象获取到ValidationInfo对象,并获取其中的验证信息。

Set<ConstraintViolation<User>> violations = validator.validate(user);
for (ConstraintViolation<User> violation : violations) {
    if (violation.getConstraintDescriptor().getPayload().contains(ValidationInfo.class)) {
        ValidationInfo validationInfo = violation.getConstraintDescriptor().getPayload(ValidationInfo.class);
        String info = validationInfo.getInfo();
        // 处理验证信息
    }
}

4、在post 和 get 请求上使用

在post上使用@Validated,get上直接放校验注解

Springboot @Validated注解详细说明,spring boot,spring boot,java文章来源地址https://www.toymoban.com/news/detail-633629.html

到了这里,关于Springboot @Validated注解详细说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot使用@Valid 和 @Validated 注解校验详解以及编写一个自定义全局异常类

    全局异常处理类 验证: ============================================== 导入所需要的包: 如果你是 springboot 项目,那么可以不用引入了,已经引入了,他就存在于最核心的 web 开发包里面。 如果你不是 springboot 项目,那么引入下面依赖即可: 新建三个实体类 实现一: 使用@Valid注解修

    2024年02月10日
    浏览(29)
  • springboot 集成 Swagger2 配置以及常用注解的说明和使用 ( 超详细)

    一、注解的使用 和 说明 结构化说明如下: @Api:用在请求的类上,表示对类的说明      tags=\\\"说明该类的作用,可以在UI界面上看到的注解\\\"    (也就是给类取别名)     value=\\\"该参数没什么意义,在UI界面上也看到,所以不需要配置\\\"    @ApiOperation:用在请求的方法上,说

    2024年02月03日
    浏览(34)
  • Spring Boot @Validated 和Javax的@Valid配合使用

    @Validation 和@Valid 常常配合使用对传输的参数进行数据校验的注解,并通过配置全局异常处理器进行合理化的提示,增加用户的体验 并且@Validated可以通过分组来指定什么时候触发什么样的参数校验(这里看一下就行,下面有说什么是分组) 其实不用这两个注解也可以完成对传

    2024年02月09日
    浏览(22)
  • Java、Java EE、Spring和Spring Boot核心注解

    文章迁移至个人博客 此页面包含常用 Java 、 Java EE 、 Spring 、 Spring Boot 、 JPA 常用注解的一站式说明。 @Component注解 @Component 注解表明被注解的类是一个“spring bean/组件”。@Component注解告诉Spring容器自动创建Spring bean。 @Autowired注解 @Autowired 注解用于自动注入 bean。@Autowired 注

    2024年02月15日
    浏览(40)
  • java spring boot 注解、接口和问题解决方法(持续更新)

    @RestController         是SpringMVC框架中的一个注解,它结合了@Controller和@ResponseBody两个注解的功能,用于标记一个类或者方法,表示该类或方法用于处理HTTP请求,并将响应的结果直接返回给客户端,而不需要进行视图渲染 @Controller         是Spring Framework中的注解,用于

    2024年02月06日
    浏览(41)
  • Spring Boot入门(23):基于AOP实现自定义注解拦截接口日志并保存入库 | 超级详细,建议收藏

            在上两期中,我们着重介绍了如何集成使用 Logback 与 log4j2 日志框架的使用,今天我们讲解的主题依旧跟日志有关,不过不是使用何种开源框架,而是自己动手造。         Spring的核心之一AOP;AOP翻译过来叫面向切面编程, 核心就是这个切面. 切面表示从业务逻辑中

    2024年02月11日
    浏览(35)
  • 【SpringBoot】详细介绍Spring Boot中@Component

    在Spring Boot中,`@Component`是一个通用的注解,用于标识一个类是Spring框架中的组件。`@Component`注解是Spring的核心注解之一,它提供了自动扫描和实例化bean的功能。 具体来说, `@Component`注解的作用是将一个普通的Java类转化为Spring的组件。通过`@Component`注解标记的类会被Spring框

    2024年02月11日
    浏览(27)
  • Spring Boot入门(04):SpringBoot实现多环境配置文件切换 | 超级详细,建议收藏

            在开发和部署Spring Boot应用的过程中,经常需要在不同的环境中进行配置,比如开发环境、测试环境、生产环境等。为了方便管理和部署,我们需要实现多环境配置文件切换。本篇教程将带你轻松搞定不同环境部署问题,让你的应用在各个环境中稳定运行。无论你是

    2024年02月12日
    浏览(33)
  • Spring Boot进阶(55):SpringBoot之集成MongoDB及实战使用 | 超级详细,建议收藏

            随着大数据时代的到来,数据存储和处理变得越来越重要。而MongoDB作为一种非关系型数据库,具有高效的数据存储和处理能力,被越来越多地应用于各种领域。尤其在Web应用开发中,SpringBoot框架已经成为了主流选择之一。在这篇文章中,我们将探讨如何将MongoD

    2024年02月17日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包