jsr-303 參數校驗—自定義校驗註解
阿新 • • 發佈:2018-08-18
nbsp 們的 else spa efault ssa password 為什麽 ini
1、為什麽要自定義?
通過上篇學習,了解到很多常用註解了,但是呢,總是有那麽些需求....2、案例分析(手機號格式)
2.1、需要驗證的實體 Bean
public class LoginVo { @NotNull @IsMobile //自定義的註解 private String mobile; @NotNull @Length(min=32) private String password; //省略 get set 方法 }
2.2、自定義 IsMobile 註解類
import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; importstatic java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) @Documented @Constraint(validatedBy= {IsMobileValidator.class }) public @interface IsMobile { //允許為空的屬性 boolean required() default true; //如果校驗不通過返回的提示信息 String message() default "手機號碼格式錯誤"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; }
2.3、校驗器
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import org.apache.commons.lang3.StringUtils; import com.imooc.miaosha.util.ValidatorUtil; //IsMobile:自定義的註解 //String:註解參數類型 public class IsMobileValidator implements ConstraintValidator<IsMobile, String> { //默認值_false,用於接收註解上自定義的 required private boolean required = false; //1、初始化方法:通過該方法我們可以拿到我們的註解 public void initialize(IsMobile constraintAnnotation) { //constraintAnnotation.required() 接收我們自定義的屬性,是否為空 required = constraintAnnotation.required(); } //2、邏輯處理 public boolean isValid(String value, ConstraintValidatorContext context) { //2.1、如果允許為空的話,直接返回結果 if(required) { return ValidatorUtil.isMobile(value); }else { //2.2、不允許為空 //2.2.1、驗證是否為空 if(StringUtils.isEmpty(value)) { return true; }else { return ValidatorUtil.isMobile(value); } } } }
3、總結
自定義註解需要去手動實現兩個文件:自定義註解類 + 註解校驗器類 自定義註解類:message() + groups() + payload() 必須; 註解校驗器類:繼承 ConstraintValidator 類<註解類,註解參數類型> + 兩個方法(initialize:初始化操作、isValid:邏輯處理)
jsr-303 參數校驗—自定義校驗註解