自定义标注参数校验
pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
创建自定义注解
@Documented
@Constraint(validatedBy = PhoneNumberValidator.class)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface PhoneNumber {
String message() default "Invalid phone number";
Class[] groups() default {};
Class[] payload() default {};
}
创建校验规则
public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String> {
@Override
public boolean isValid(String phoneField, ConstraintValidatorContext context) {
if (phoneField == null) return true; // can be null
return phoneField != null && phoneField.matches("[0-9]+")
&& (phoneField.length() > 8) && (phoneField.length() < 14);
}
}
使用方式
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AccountDto {
@PhoneNumber
private String phoneNumber;
}
@Slf4j
@RestController
public class ParamVerifyController {
@PostMapping("customParamVerify")
@ResponseBody
public String customParamVerify(@RequestBody @Valid AccountDto accountDto){
log.info("Account {}",accountDto);
return "ok";
}
}
请求此接口,如果参数不满足校验规则,则会抛出异常。
org.springframework.web.bind.MethodArgumentNotValidException