spring使用@Validated进行分组校验

利用@Validated的分组功能可以实现简单的属性条件校验,效果类似对校验添加一个开关,一个方法对属性P不校验,而另一个方法对属性P进行校验。

遇到的问题是一个表分2页面存入数据库,实体类只定义了一个,两个页面要校验的属性不一样,就出现A页面更新时就会去检验B页面出现的属性,B页面更新时就去校验A页面的属性.

## 定义两个空接口

public interface UpdateA {
}

public interface UpdateB {
}

## 实体类中参数注解设置groups选项

 @NotEmpty(message = "客户名称不能为空",groups = {UpdateA.class})
 private String name;

@NotNull(message = "客户级别不能为空",groups = {UpdateB.class})
private String Level;

## 在controller的方法中指定要使用的groups选项

@PutMapping
@ApiOperation(value = "修改客户基本信息", tags = "客户")
public void updateCust1(@RequestBody @Validated({UpdateA.class}) Customer cust) {

}



@PutMapping
@ApiOperation(value = "修改客户其他信息", tags = "客户")
public void updateCust2(@RequestBody @Validated({UpdateB.class}) Customer cust) {

}

这样处理后,同一个实体类可以根据不同的方法有条件的校验不同的属性

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
如果在 JAX-RS RESTful 服务接口中使用 @Validated 进行分组校验,但是校验对象入参为生效,可能是由于以下原因: 1. 没有在 Spring Boot 项目中引入 javax.validation 依赖。在 pom.xml 文件中添加以下依赖即可: ``` <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> ``` 2. 没有在 Spring Boot 项目中启用校验功能。可以在 application.yml 或 application.properties 文件中添加以下配置: ``` spring: mvc: # 启用校验功能 validation: # 快速失败模式 fail-fast: true ``` 3. 没有在校验对象属性上添加 @NotNull、@NotBlank 等校验注解。例如,在上面的示例中,必须在 User 类的用户名和密码属性上添加 @NotNull、@NotBlank 注解才能生效。 如果以上三点都没有问题,仍然无法生效,可以检查是否在校验分组接口上添加了 @Default 注解。如果添加了该注解,就会使用默认分组进行校验,而忽略自定义的分组。 另外,如果需要在 JAX-RS RESTful 服务接口中分组校验嵌套对象或集合类型的属性,可以使用 @Valid 注解。例如: ``` public class Address { @NotBlank(message = "省不能为空") private String province; @NotBlank(message = "市不能为空") private String city; @NotBlank(message = "区不能为空") private String district; // 其他属性和方法省略 } public class User { @NotNull(message = "用户名不能为空", groups = {CreateUserGroup.class}) @NotBlank(message = "用户名不能为空格", groups = {CreateUserGroup.class}) private String username; @NotNull(message = "密码不能为空", groups = {CreateUserGroup.class}) @NotBlank(message = "密码不能为空格", groups = {CreateUserGroup.class}) private String password; @Valid private Address address; @Valid private List<Address> addressList; // 其他属性和方法省略 } @Path("/users") public class UserResource { @POST @Path("/") public Response createUser(@Validated(CreateUserGroup.class) User user) { // 处理创建用户账号的业务逻辑 } } ``` 上述代码中,@Valid 注解用于校验 User 对象中的 Address 对象和 addressList 属性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值