java注解检验集合对象_Java 对list对象进行属性校验

ps:对list对象进行属性校验。

@Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上

@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上

user实体类:

package com.lucifer.demo.pojo;

import lombok.Data;

import javax.validation.constraints.NotBlank;

import javax.validation.constraints.NotNull;

/**

* @author: lucifer

* @date: 2019/8/6

* @description:

*/

@Data

public class User {

@NotBlank(message = "姓名不能为空")

private String name;

@NotNull(message = "年龄不能为空")

private Integer age;

}

1.不能校验;

1》测试controller:

@Slf4j

@RestController

public class TestController {

@PostMapping(value = "test")

public void test(@RequestBody @Validated Listusers){

for(User user:users){

log.info("姓名:{},年龄:{}",user.getName(),user.getAge());

}

}

}

2》用postman测试:

201ee9226841ad25913fce9020b64b05.png

2.校验成功;

1》在1的基础上增加一个UserList类,并将user对象作为这个类的属性,@Valid注解是校验这个属性。

package com.lucifer.demo.pojo;

import lombok.Data;

import javax.validation.Valid;

import java.util.List;

/**

* @author: lucifer

* @date: 2019/8/6

* @description:

*/

@Data

public class UserList {

@Valid

private ListuserList;

}

2》测试controller2:

@PostMapping(value = "test2")

public void test(@RequestBody @Validated UserList userList) {

Listusers = userList.getUserList();

for (User user : users) {

log.info("姓名:{},年龄:{}", user.getName(), user.getAge());

}

}

3》postman测试:

ef0b9c72db8f3c2e6694ceaa7b430ac8.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Java注解校验框架可以很方便地校验集合对象。可以使用`@Valid`注解来指示校验器递归地校验集合的元素。 以下是一个示例代码段,它演示了如何在集合对象使用`@Valid`注解: ```java public class Order { @NotNull private String id; @NotNull @Size(min = 1) private List<@Valid Item> items; // ... getters and setters } public class Item { @NotNull private String productId; @Min(1) private int quantity; // ... getters and setters } ``` 在这个示例,`Order`类包含一个名称为`items`的列表属性,它包含了`Item`对象。`@Valid`注解告诉校验器要递归地校验`Item`对象。`@Size(min = 1)`注解指示`items`列表不能为空。`Item`类包含了`productId`和`quantity`属性,并使用`@NotNull`和`@Min`注解进行校验。 要执行校验,可以使用类似以下的代码: ```java ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Order order = new Order(); Set<ConstraintViolation<Order>> violations = validator.validate(order); if (violations.isEmpty()) { // 校验通过 } else { // 校验失败,对校验失败的信息进行处理 } ``` 这个示例演示了如何使用Java注解校验框架来校验集合对象。在校验集合时,使用`@Valid`注解可以很方便地递归地校验集合的元素。 ### 回答2: 使用Java注解校验框架如Hibernate Validator或Spring Validation可以方便地对集合对象进行校验。以下是一个使用Hibernate Validator校验集合对象的示例代码: 首先,我们创建一个包含集合对象Java类,例如UserGroup: ```java public class UserGroup { @NotEmpty(message = "User list cannot be empty") private List<@Valid User> userList; // getters and setters } ``` 在UserGroup类,我们使用了Hibernate Validator提供的@NotEmpty注解来确保该列表不为空。同时,通过@Valid注解校验列表的每个User对象。 接下来,我们创建一个包含校验逻辑的Java类,例如UserValidator: ```java public class UserValidator { public static void main(String[] args) { UserGroup userGroup = new UserGroup(); // 假设从数据库查询出了一些用户并将其添加到userList List<User> userList = new ArrayList<>(); userList.add(new User("", "123456")); userGroup.setUserList(userList); ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Set<ConstraintViolation<UserGroup>> violations = validator.validate(userGroup); for (ConstraintViolation<UserGroup> violation : violations) { System.out.println(violation.getMessage()); } } } ``` 在UserValidator类,我们创建了一个UserGroup对象,并向其添加了一个用户名为空的User对象。接着,我们使用Validation.buildDefaultValidatorFactory()方法获取一个默认的ValidatorFactory实例,并通过该实例获取一个Validator,用于后续的校验操作。 然后,我们使用validator.validate(userGroup)方法对UserGroup对象进行校验,并将校验结果保存在一个Set集合。最后,我们遍历该集合,并输出每个校验错误的消息。 在上述示例,当我们运行UserValidator类时,会输出"User list cannot be empty"的错误消息,因为我们在UserGroup类的userList字段上标注了@NotEmpty注解,该注解要求该列表不为空。 通过以上示例,可以看出使用Java注解校验框架可以方便地对集合对象进行校验,可以通过不同的注解来定义校验规则,并通过校验器来执行校验操作。 ### 回答3: 使用java注解校验框架可以通过给集合对象定义自定义注解,并在注解添加相应的校验规则,然后使用注解处理器来对集合对象进行校验。以下是一段示例代码: 首先,定义一个用于校验集合对象注解`@ValidateCollection`,并在注解添加一个校验规则`notEmpty`,用于判断集合对象是否为空。代码如下所示: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ValidateCollection { boolean notEmpty() default true; } ``` 接下来,定义一个使用了`@ValidateCollection`注解的类`User`,其有一个使用了该注解集合对象`roles`。代码如下所示: ```java import java.util.List; public class User { @ValidateCollection(notEmpty = true) private List<String> roles; // 省略其他属性和方法 } ``` 然后,创建一个注解处理器`ValidateCollectionProcessor`,用于处理`@ValidateCollection`注解,并对集合对象进行校验。代码如下所示: ```java import java.lang.reflect.Field; import java.util.Collection; public class ValidateCollectionProcessor { public static void validate(Object obj) throws IllegalAccessException { Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(ValidateCollection.class)) { field.setAccessible(true); ValidateCollection annotation = field.getAnnotation(ValidateCollection.class); Collection collection = (Collection) field.get(obj); if (annotation.notEmpty() && (collection == null || collection.isEmpty())) { throw new IllegalArgumentException("集合对象不能为空"); } } } } } ``` 最后,在需要对集合对象进行校验的地方,调用`ValidateCollectionProcessor`类的`validate`方法进行校验。代码如下所示: ```java public class Main { public static void main(String[] args) throws IllegalAccessException { User user = new User(); user.setRoles(null); ValidateCollectionProcessor.validate(user); } } ``` 以上示例,我们对`User`类的`roles`集合对象进行校验,根据`@ValidateCollection`注解的规则,如果`roles`集合对象为空,则会抛出异常提示集合对象不能为空。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值