我正在使用Spring REST API,并具有以下控制器:
@RestController
@RequestMapping(
value = "/api/Test",
produces = "application/json"
)
public class MyController {
@RequestMapping(method = RequestMethod.POST)
public Response serviceRequest(@Valid @RequestBody ServiceRequest myServiceRequest) {
....
}
}
ServiceRequest具有以下结构:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ServiceRequest {
@NotBlank
private LocalDate fromDate;
@NotBlank
private LocalDate toDate;
}
我的任务是基于fromDate和toDate字段值的组合引入验证:如果它们之间的时间段长于1周,则验证应该失败。
请问最好的存档方法是什么?
答案 0 :(得分:1)
您可以创建一个自定义约束验证器,以在处理请求之前验证所需条件。
DatesDifference.java
@Constraint(validatedBy = DatesDifferenceValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DatesDifference {
String message() default "Dates difference is more than a week";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
DatesDifferenceValidator.java
@Component
public class DatesDifferenceValidator implements ConstraintValidator<DatesDifference, ServiceRequest> {
@Override
public boolean isValid(ServiceRequest serviceRequest, ConstraintValidatorContext context) {
System.out.println("validation...");
if (!(serviceRequest instanceof ServiceRequest)) {
throw new IllegalArgumentException("@DatesDifference only applies to ServiceRequest");
}
LocalDate from = serviceRequest.getFromDate();
LocalDate to = serviceRequest.getToDate();
long daysBetween = ChronoUnit.DAYS.between(from, to);
System.out.println("daysBetween "+daysBetween);
return daysBetween <= 7;
}
}
ServiceRequest.java
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@DatesDifference
public class ServiceRequest {
@NotBlank
private LocalDate fromDate;
@NotBlank
private LocalDate toDate;
}