码迷,mamicode.com
首页 > 其他好文 > 详细

自定义注解编写以及讲解(以异常处理为例)

时间:2020-06-09 18:23:10      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:sage   als   element   uid   验证   路径   runtime   出错   lis   

1,@Constraint注解

说到自定义验证类型的注解,那就要说说@Constraint这个官方注解了,我们既然自定义了注解,那么注解的逻辑在哪里处理呢?没错,就是这个@Constraint帮我们处理。

message则是定义错误提示,其取值路径一般是校验注解的全类名,会在配置文间种取出{}中配置的消息,本例是在配置文件中取出com.atguigu.common.valid.ListValue.message配置的消息。

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;
@Documented @Constraint(validatedBy = { ListValueConstraintValidataor.class }) @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE }) @Retention(RUNTIME) public @interface ListValue { String message() default "{com.atguigu.common.valid.ListValue.message}"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; int[] vals() default { }; }
2、@Constraint注解逻辑处理方法
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;

//ConstraintValidator<>注解种填写两个泛型,一个是自定义注解,一个是指标注在什么类型上
public class ListValueConstraintValidataor implements ConstraintValidator<ListValue, Integer> {

    private Set<Integer> set = new HashSet<>();

    /*
     *初始化方法
     *将注解内的值例如:@ListValue(vals = {0,1})种0,1放入set中
     */
    @Override
    public void initialize(ListValue constraintAnnotation) {

        int[] vals = constraintAnnotation.vals();

        for (int val : vals) {
            set.add(val);
        }
    }

    /*
     * 判断是否校验成功
     * value是需要校验的值,本例种是Integer的值
     */
    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
        return set.contains(value);
    }
}

3、需要校验的对象

import com.atguigu.common.valid.AddGroup;
import com.atguigu.common.valid.ListValue;
import com.atguigu.common.valid.UpadteGroup;
import com.atguigu.common.valid.UpadteStatusGroup;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.util.Date;

import lombok.Data;
import org.hibernate.validator.constraints.URL;

import javax.validation.constraints.*;

/**
 * 品牌
 * 
 * @author chenshun
 * @email linchenguang@gmail.com
 * @date 2020-05-19 20:39:16
 */
@Data
@TableName("pms_brand")
public class BrandEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 品牌id
     */
    @NotNull(message = "修改必须指定品牌id",groups = {UpadteGroup.class})
    @Null(message = "新增必须指定品牌id",groups = {AddGroup.class})
    @TableId
    private Long brandId;
    /**
     * 品牌名
     */
    @NotBlank(message = "品牌名必须提交",groups = {AddGroup.class,UpadteGroup.class})
    private String name;
    /**
     * 品牌logo地址,新增时不能为空并且符合URL地址格式,而修改时可以为空但必须符合URL地址
     */
    @NotBlank(groups = {AddGroup.class})
    @URL(message = "必须上传正确图片",groups = {AddGroup.class,UpadteGroup.class})
    private String logo;
    /**
     * 介绍
     */
    private String descript;
    /**
     * 显示状态[0-不显示;1-显示]
     */
    @NotNull(groups = {AddGroup.class, UpadteStatusGroup.class})
    @ListValue(vals = {0,1},groups = {AddGroup.class, UpadteStatusGroup.class})
    private Integer showStatus;
    /**
     * 检索首字母
     */
    @NotEmpty(groups = {AddGroup.class})
    @Pattern(regexp = "^[a-zA-Z]$",message = "范围必须在a-z或A-Z之间",groups = {AddGroup.class,UpadteGroup.class})
    private String firstLetter;
    /**
     * 排序
     */
    @NotNull(groups = {AddGroup.class})
    @Min(value = 0,message = "排序必须大于等于0",groups = {AddGroup.class,UpadteGroup.class})
    private Integer sort;

}

4、ValidationMessages.properties:

com.atguigu.common.valid.ListValue.message = 传入值出错

自定义注解编写以及讲解(以异常处理为例)

标签:sage   als   element   uid   验证   路径   runtime   出错   lis   

原文地址:https://www.cnblogs.com/linchenguang/p/13075490.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!