穀粒商城學習——P69 JSR303自定義校驗註解

1,編寫一個自定義校驗註解ListValue

package com.atguigu.common.valid;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * @Description: 自定義校驗註解
 * @Author: zyn
 * @Date: 2021-7-2
 */
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {ListValueConstraintValidator.class })//指定自定義校驗器
public @interface ListValue {
    String message() default "{com.atguigu.common.valid.ListVal.message}";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
    int[] vals();
}
View Code

建ValidationMessages.proerties文件,配置ListValue中的指定的message

com.atguigu.common.valid.ListVal.message=必須提交指定的值
此處有個坑,坑了我一個多小時,.proerties屬性值取出來一直亂碼,最後看了@一篇文章給了思路,刪除重建好了(並沒有像文中那樣單獨指定properties文件編碼)

2,編寫一個自定義校驗器

判斷校驗是否成功

package com.atguigu.common.valid;


import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;

/**
 * @Description: 自定義校驗註解.
 * @Author: zyn
 * @Date: 2021-7-2
 */
//ConstraintValidator 接收兩個
public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> {
    private Set<Integer> set=new HashSet<>();
    //初始化方法
    @Override
    public void initialize(ListValue constraintAnnotation) {
        int [] vals=constraintAnnotation.vals();//校驗註解標註的指定的值
        for (int val : vals) {
            set.add(val);
        }
    }

    //判斷是否校驗成功
    /**
     * @Description:
     * @Author: zyn
     * @Date: 2021-7-5
     * @param value 標註校驗註解屬性的傳過來的值,需要校驗的值
     */
    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext context) {
        return set.contains(value);
    }
}
View Code

 

3,關聯自定義校驗器和自定義校驗註解

主要是校驗註解中Constraint validatedBy指定自定義校驗器,在步驟1代碼中已呈現

實體類需要校驗的字段標註步驟1的自定義校驗註解

    @ListValue(vals={0,1},groups = AddGroup.class)
    private Integer showStatus;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章