gpt4 book ai didi

java - 如何验证 pojo 集合

转载 作者:行者123 更新时间:2023-11-30 10:01:02 24 4
gpt4 key购买 nike

我有一组 pojo 对象

public class Assignment {
Date entrydate;
Date exitdate;
String team,
double allocation;
String username,
//getters and setters
}

示例值是对象 1:

entrydate: "2000-01-01", exitdate: "2019-03-31", team: "team1", allocation: 0.5 username: "user1"

对象 2:

entrydate: "2000-01-01", exitdate: "2019-03-31", team: "team2", allocation: 0.5 username: "user1"

对象 3:

entrydate: "2019-04-01", exitdate: "2019-07-31", team: "team3", allocation: 0.6 username: "user1"

对象 4:

entrydate: "2019-05-01", exitdate: "2019-07-31", team: "team4", allocation: 0.6 username: "user1"

我的标准是针对特定用户和特定日期期间的总分配计数应为 1 => 合乎逻辑的解释是工程师在特定期间内的工作量不应超过 100% 或低于 100%。

我们需要一个函数,我们在其中传递上述 pojo 对象的集合,如果它不符合这个标准,它应该抛出一个错误并给出适当的解释——比如对于这个日期范围,指定团队的分配已经超过 1。此外,此方法应检查是否存在日期间隔——对此功能的合理解释是——工程师不应在指定时间段内空闲

方法签名将是

List<String> getValidation(List<Assignment > assignments);

(假设我们知道所有分配都属于某个特定用户 --> 现在无需担心用户名)

如何正确实现

最佳答案

有几种方法可以解决这个问题。 javax-validation-api 中已经存在注释,例如 NotNullMinMax ......

您只需按照下面的说明在您的案例的 pojo 变量上使用这些注释。

public class Assignment {
Date entrydate;
Date exitdate;
String team,
@Min(0)
@Max(1)
double allocation;
String username,
//getters and setters
}

您需要通过如下所示的 @Valid 注释来指示您的 Controller 您需要对请求正文进行验证。

@PostMapping("someEndPoint")
public ResponseEntity getSomeThing(@Valid @RequestBody requestBody)
{
}

在必须验证 @PathVariable 的情况下,您必须在 Controller 类本身上使用 @Validated

@Api("AssignmentController")
@RestController
@Validated
@RequestMapping(value = "/api/admin")
public class AssignmentController {
}

如果您需要对 javax 验证 未提供的字段进行自定义验证,您可以为此目的实现自定义 validator 和自定义注释。

让我们看一个示例,您想要创建一个注解 @ValidAllocation,它将验证您的 allocation 字段。

创建自定义注释:

@Documented
@Retention(RUNTIME)
@Target({FIELD, ANNOTATION_TYPE, PARAMETER})
@Constraint(validatedBy = AllocationValidator.class)
public @interface ValidAssignment {
String message() default "Assignment should be between 0 and 1";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}

创建注释使用的自定义 validator :

@Component
public class AllocationValidator implements ConstraintValidator<ValidAssignment, Double> {

@Override
public boolean isValid(Double value, ConstraintValidatorContext constraintValidatorContext) {
return (value >=0 && value <=1);
}

@Override
public void initialize(ValidAssignment validAssignment) {}
}

您的 Pojo 将如下所示

public class Assignment {
Date entrydate;
Date exitdate;
String team,
@ValidAllocation
double allocation;
String username,
//getters and setters
}

如果您有任何问题,请告诉我:)

关于java - 如何验证 pojo 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57675534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com