代码风格-参数校验

代码风格-参数校验

相关依赖

<!--用于生成getter/setter方法 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <!--版本任意 -->
    <version>1.16.8</version>
</dependency>

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.4.Final</version>
</dependency>
<!-- validation使用el表达式所需包 -->
<dependency>
    <groupId>de.odysseus.juel</groupId>
    <artifactId>juel-api</artifactId>
    <version>2.2.7</version>
</dependency>
<dependency>
    <groupId>de.odysseus.juel</groupId>
    <artifactId>juel-impl</artifactId>
    <version>2.2.7</version>
</dependency>

示例

枚举类型

@Getter
public enum SexEnum {
    UNKNOW(0, "未知"),
    MALE(1, "男性"),
    FEMALE(2, "女性"),
    ;

    private Integer value;
    private String comment;

    SexEnum(Integer value, String comment) {
        this.value = value;
        this.comment = comment;
    }

    public static SexEnum of(Integer value) {
        if (value == null) {
            return null;
        }
        switch (value) {
            case 0:
                return SexEnum.UNKNOW;
            case 1:
                return SexEnum.MALE;
            case 2:
                return SexEnum.FEMALE;
            default:
                return null;
        }
    }
}

枚举校验注解

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {EnumValidator.class})
@Documented
public @interface EnumValidAnnotation {
    String message() default "";

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

    Class<? extends Payload>[] payload() default {};

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

需校验的实体类

@Data
public class ValidateVO {
    @NotNull(message = "age不能为空")
    @Range(min = 1, max = 12, message = "age必须在{min}~{max}之间")
    public Integer age;

    @EnumValidAnnotation(target = SexEnum.class, message = "性别只能使用{target}里的值")
    public Integer sex;
}

校验工具类

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.xml.bind.ValidationException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidationUtil {
    private static Validator validator;

    static {
        ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
        validator = vf.getValidator();
    }

    /**
     * javax.validation注解校验
     *
     * @param t 将要校验的对象
     * @throws ValidationException
     * @Description: 校验方法
     */
    public static <T> List<String> validate(T t) {
        Set<ConstraintViolation<T>> set = validator.validate(t);
        List<String> validateError = new ArrayList<>();
        if (set.size() > 0) {
            for (ConstraintViolation<T> val : set) {
                validateError.add(val.getMessage());
            }
        }
        return validateError;
    }

    public static void main(String[] args) {
        ValidateVO vo = new ValidateVO();
        //vo.setSex(SexEnum.FEMALE.getValue());
        vo.setAge(10);
        List<String> resultList = ValidationUtil.validate(vo);
        System.out.println(resultList.get(0));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰式的美式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值