网站虚拟空间过期,做英文网站要多少钱,深圳旅游网站建设,网站建设的初衷文章目录 一、使用二、常用注解三、Valid or Validated #xff1f;四、分组校验1. 分组校验的基本概念2. 定义验证组3. 应用分组到模型4. 在控制器中使用分组5. 总结 一、使用
要使用这些注解#xff0c;首先确保在你的 Spring Boot 应用的 pom.xml 文件中添加了 spring-bo… 文章目录 一、使用二、常用注解三、Valid or Validated 四、分组校验1. 分组校验的基本概念2. 定义验证组3. 应用分组到模型4. 在控制器中使用分组5. 总结 一、使用
要使用这些注解首先确保在你的 Spring Boot 应用的 pom.xml 文件中添加了 spring-boot-starter-validation 依赖。然后你可以将这些注解应用于你的模型类字段上。在你的控制器方法中你可以使用 Valid 或 Validated 注解来触发验证例如
PostMapping(/users)
public ResponseEntity? createUser(Valid RequestBody User user) {// 如果存在验证错误会抛出异常// 正常业务逻辑
}在这个例子中如果 User 对象的字段不满足注解定义的验证规则Spring 将抛出一个异常你可以通过全局异常处理或控制器层的异常处理来处理这些异常并向用户返回适当的响应。
二、常用注解
spring-boot-starter-validation 依赖包引入了 Java Bean Validation API通常基于 Hibernate Validator 实现提供了一系列注解来帮助你对 Java 对象进行验证。以下是一些常用的验证注解及其含义和使用方式 NotNull: 确保字段不是 null。 public class User {NotNull(message 用户名不能为空)private String username;// 其他字段和方法
}NotEmpty: 确保字段既不是 null 也不是空对于字符串意味着长度大于0对于集合意味着至少包含一个元素。 public class User {NotEmpty(message 密码不能为空)private String password;// 其他字段和方法
}NotBlank: 确保字符串字段不是 null 且至少包含一个非空白字符。 public class User {NotBlank(message 邮箱不能为空且不能只包含空格)private String email;// 其他字段和方法
}Size: 确保字段字符串、集合、数组符合指定的大小范围。 public class User {Size(min 2, max 30, message 用户名长度必须在2到30之间)private String username;// 其他字段和方法
}Min 和 Max: 对数值类型字段设置最小值和最大值。 public class User {Min(value 18, message 年龄必须大于等于18)Max(value 100, message 年龄必须小于等于100)private int age;// 其他字段和方法
}Email: 确保字段是有效的电子邮件地址。 public class User {Email(message 无效的邮箱格式)private String email;// 其他字段和方法
}Pattern: 确保字符串字段匹配正则表达式。 public class User {Pattern(regexp ^[a-zA-Z0-9]$, message 用户名只能包含字母和数字)private String username;// 其他字段和方法
}Positive 和 PositiveOrZero: 确保数值字段是正数或者正数和零。 public class Product {Positive(message 价格必须是正数)private BigDecimal price;// 其他字段和方法
}三、Valid or Validated
Valid 和 Validated 注解都用于数据验证但它们在使用和功能上有一些差异 Valid: 来源于 JSR 303/JSR 380 Bean Validation API。可以用在方法参数上以触发对传递给该方法的对象的验证。这通常在 Spring MVC 中用于验证带有 RequestBody 或 ModelAttribute 注解的参数。不支持验证组的概念这意味着不能控制验证的顺序或验证特定的子集。 示例 PostMapping(/users)
public ResponseEntity? createUser(Valid RequestBody User user) {// 业务逻辑
}Validated(推荐): 是 Spring 的特有注解不是 JSR 303/JSR 380 的一部分。支持验证组允许您更灵活地指定在特定情况下应用哪些验证约束。例如可以根据不同的操作如创建、更新定义不同的验证规则。可以用在类型级别在类上和方法参数上。在类型级别使用时它会触发该类中所有带有验证注解的方法的验证。 示例 PostMapping(/users)
public ResponseEntity? createUser(Validated RequestBody User user) {// 业务逻辑
}在实际使用中如果你需要简单的验证功能Valid 是一个很好的选择。如果你需要更复杂的验证逻辑比如验证组那么 Validated 更适合。此外Validated 可以应用在类级别从而对一个类的多个方法进行验证这在使用 Spring 服务层时非常有用。
四、分组校验
分组校验Group Validation是一种在 Java Bean Validation 中用于在不同上下文中应用不同验证规则的方法。这对于那些在不同情况下例如创建 vs 更新需要不同验证规则的对象特别有用。
1. 分组校验的基本概念
在分组校验中你可以定义多个接口通常为空来表示不同的验证组。然后你可以在验证注解中指定这些接口以表明该注解仅在验证特定组时应用。
例如你可能有一个User类其中某些字段在创建用户时是必需的但在更新用户时可能是可选的。
2. 定义验证组
首先定义两个空接口作为验证组
public interface OnCreate {}
public interface OnUpdate {}3. 应用分组到模型
然后在你的模型类中使用这些接口作为验证注解的参数
public class User {NotNull(groups OnCreate.class)private Long id;NotBlank(groups {OnCreate.class, OnUpdate.class})private String username;Email(groups {OnCreate.class, OnUpdate.class})private String email;// 其他字段和方法
}在这个例子中id 字段仅在创建用户时需要验证OnCreate组而 username 和 email 字段在创建和更新用户时都需要验证。
4. 在控制器中使用分组
最后在你的控制器方法中使用 Validated 注解指定要应用的验证组
PostMapping(/users)
public ResponseEntity? createUser(Validated(OnCreate.class) RequestBody User user) {// 创建用户的业务逻辑
}PutMapping(/users)
public ResponseEntity? updateUser(Validated(OnUpdate.class) RequestBody User user) {// 更新用户的业务逻辑
}在这个例子中createUser 方法只会验证属于 OnCreate 组的字段而 updateUser 方法则只会验证属于 OnUpdate 组的字段。这样你就可以根据不同的操作自定义验证逻辑了。
5. 总结
通过使用分组校验你可以为同一个对象的不同操作设置不同的验证规则这在复杂应用中非常有用。这种方法提高了代码的灵活性和可维护性。