jsr-303 参数校验—自定义校验注解
生活随笔
收集整理的這篇文章主要介紹了
jsr-303 参数校验—自定义校验注解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、為什么要自定義?
通過上篇學(xué)習(xí),了解到很多常用注解了,但是呢,總是有那么些需求....2、案例分析(手機(jī)號格式)
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; import static 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 "手機(jī)號碼格式錯誤";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:注解參數(shù)類型 public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {//默認(rèn)值_false,用于接收注解上自定義的 requiredprivate boolean required = false;//1、初始化方法:通過該方法我們可以拿到我們的注解public void initialize(IsMobile constraintAnnotation) {//constraintAnnotation.required() 接收我們自定義的屬性,是否為空required = constraintAnnotation.required();}//2、邏輯處理public boolean isValid(String value, ConstraintValidatorContext context) {//2.1、如果允許為空的話,直接返回結(jié)果if(required) {return ValidatorUtil.isMobile(value);}else {//2.2、不允許為空//2.2.1、驗證是否為空if(StringUtils.isEmpty(value)) {return true;}else {return ValidatorUtil.isMobile(value);}}}}?
3、總結(jié)
自定義注解需要去手動實現(xiàn)兩個文件:自定義注解類 + 注解校驗器類自定義注解類:message() + groups() + payload() 必須;注解校驗器類:繼承 ConstraintValidator 類<注解類,注解參數(shù)類型> + 兩個方法(initialize:初始化操作、isValid:邏輯處理)?
總結(jié)
以上是生活随笔為你收集整理的jsr-303 参数校验—自定义校验注解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyecharts在jupyter no
- 下一篇: 详解JavaScript中void语句的