完整实践案例
Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
定义约束注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CheckCorpusModeValidator.class)
@Documented
@Repeatable(CheckCorpusMode.CheckCorpusModes.class)
public @interface CheckCorpusMode {
String message() default "corpus mode is not found";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface CheckCorpusModes {
CheckCorpusMode[] value();
}
}
定义约束验证器
public class CheckCorpusModeValidator implements ConstraintValidator<CheckCorpusMode, String> {
@Override
public void initialize(CheckCorpusMode constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
}
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
return CommonConstant.CorpusMode.checkIfExistsByModeName(value);
}
}
使用约束注解
@Data
public class CompleteCorpusInDto {
@Min(1)
private Integer userId;
@Min(1)
private Integer corpusId;
@CheckCorpusMode
private String corpusModeName;
}
开启验证参数
@PostMapping("completeCorpus")
public ResponseEntity completeCorpus(@RequestBody @Validated CompleteCorpusInDto completeCorpusInDto) {
Integer userId = completeCorpusInDto.getUserId();
Integer corpusId = completeCorpusInDto.getCorpusId();
String corpusModeName = completeCorpusInDto.getCorpusModeName();
CommonConstant.CorpusMode corpusMode = CommonConstant.CorpusMode.getModeByModeName(corpusModeName);
userService.completeCorpus(userId, corpusId, corpusMode);
return ResponseEntity.wrapSuccessMessageResponseEntity();
}
参考文档
PREVIOUSJVM内存区域
NEXTJava动态代理使用