在我們開發項目過程中,肯定會遇到對存儲字段的格式進行驗證操作的,比如ip,手機號等,這樣我們一般都是加個if判斷,如果需要驗證的地方很多,我們就要加很多if判斷,這樣會代碼重複的地方也就多了起來,看起來也不好看,我們如何才能更加精煉我們的代碼呢,自定義註解可以解決這些個問題,我們只需要在實體bean上加個註解就可以對我們的格式進行驗證,方面,顯得高大上。下面是代碼實現:
定義註解:
@Target(ElementType.FIELD) //指定作用於字段上
@Constraint(validatedBy = IpV4ValidRule.class) // 指定驗證規則類
@Retention(RetentionPolicy.RUNTIME) // 項目運行時可以被發現
public @interface IpValid {
String message() default "IP格式不正確"; //默認提示信息
Class<?>[] groups() default {}; //分組
Class<? extends Payload>[] payload() default { };
}
實現ConstraintValidator<T,T>,這個類就可以被spring管理起來,可以在裏面添加規則驗證邏輯
public class IpV4ValidRule implements ConstraintValidator<IpValid,String> {
@Override
public void initialize(IpValid constraintAnnotation) {}
@Override
public boolean isValid(String str, ConstraintValidatorContext constraintValidatorContext) {
if(ObjectUtils.isEmpty(str)){
return false;
}else if(str.matches(Regexs.IP_REGEX)){
return true;
}
return false;
}
}
實體bean需要驗證的字段上加個@IpValid即可
public class Event{
@IpValid
private String ip;
}
在控制層添加@Validated 或者@Valid即可實現驗證
@ApiOperation("保存")
@PostMapping
public Event save(@Validated @RequestBody Event event) {
return eventService.save(event);
}
簡單吧~.~