我有一些pojo对象
public class Assignment {
Date entrydate;
Date exitdate;
String team,
double allocation;
String username,
//getters and setters
}
示例值是 对象1:
输入日期:“ 2000-01-01”, 退出日期:“ 2019-03-31”, 团队:“ team1”, 分配:0.5 用户名:“ user1”
对象2:
输入日期:“ 2000-01-01”, 退出日期:“ 2019-03-31”, 团队:“ team2”, 分配:0.5 用户名:“ user1”
对象3:
输入日期:“ 2019-04-01”, 退出日期:“ 2019-07-31”, 团队:“ team3”, 分配:0.6 用户名:“ user1”
对象4:
输入日期:“ 2019-05-01”, 退出日期:“ 2019-07-31”, 团队:“ team4”, 分配:0.6 用户名:“ user1”
我的标准是针对特定用户,并且在特定日期段内,总分配数应为1 =>逻辑上的解释是工程师在特定时期内的工作量不应超过100%或少于100%。 / p>
我们需要一个函数,在该函数中我们传递上述pojo对象的集合,如果该集合不符合此条件,则应抛出一个错误并给出正确的解释-像在此日期范围内,指定团队的分配已超过1。另外,此方法还应检查日期间隔(如果有的话)-该功能的逻辑解释是-工程师在指定时期内不应处于空闲状态
方法签名将为
List<String> getValidation(List<Assignment > assignments);
(假设我们知道所有分配都属于特定用户->现在无需担心用户名)
如何正确执行此操作
答案 0 :(得分:1)
有几种解决方法。 javax-validation-api
中已经有现有的注释,例如NotNull
,Min
,Max
,...
您只需在pojo变量上为这些情况使用这些注释,如下所示。
public class Assignment {
Date entrydate;
Date exitdate;
String team,
@Min(0)
@Max(1)
double allocation;
String username,
//getters and setters
}
您需要通过以下@Valid
批注指示您的控制器您需要对请求正文进行验证。
@PostMapping("someEndPoint")
public ResponseEntity getSomeThing(@Valid @RequestBody requestBody)
{
}
在必须验证@PathVariable
的情况下,您必须像在控制器类本身上使用@Validated
@Api("AssignmentController")
@RestController
@Validated
@RequestMapping(value = "/api/admin")
public class AssignmentController {
}
如果需要在javax validations
未提供的字段上进行自定义验证,则可以为此目的实现自定义验证器和自定义注释。
让我们看一个示例,您要创建一个注释@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 { };
}
创建供注释使用的自定义验证器:
@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
}
让我知道您是否有任何问题:)