Java Validation 只能输入固定值(自定义校验注解、@Pattern)

这篇具有很好参考价值的文章主要介绍了Java Validation 只能输入固定值(自定义校验注解、@Pattern)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法一:

自定义校验注解

注解接口:

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.HashSet;
import java.util.Set;

/**
 * 只能提交指定的值
 * 自定义校验
 */
@Documented
@Constraint(validatedBy = { ListValue.ListValueConstraintValidator.class, ListValue.ListStringValueConstraintValidator.class }) // 指定校验器,这里不指定时,就需要在初始化时指定
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ListValue {

    // 默认的提示内容
    String message() default "必须提交指定的值哦";

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

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

    int[] values() default { }; //数值数组,提交的值只能是数组里面

    String[] strValues() default { }; //字符串数组,提交的值只能是数组里面

    class ListValueConstraintValidator implements ConstraintValidator<ListValue, Integer> {

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

        /**
         * 初始化方法
         */
        @Override
        public void initialize(ListValue constraintAnnotation) {
            int[] values = constraintAnnotation.values();
            for (int val : values) {
                set.add(val);
            }
        }

        /**
         * 判断是否校验成功
         */
        @Override
        public boolean isValid(Integer value, ConstraintValidatorContext context) {
            return set.contains(value);
        }
    }

    class ListStringValueConstraintValidator implements ConstraintValidator<ListValue, String> {

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

        /**
         * 初始化方法
         */
        @Override
        public void initialize(ListValue constraintAnnotation) {
            String[] values = constraintAnnotation.strValues();
            for (String val : values) {
                set.add(val);
            }
        }

        /**
         * 判断是否校验成功
         */
        @Override
        public boolean isValid(String value, ConstraintValidatorContext context) {
            return set.contains(value);
        }
    }
}

DTO使用:


    /**
     * 回避类型:1单位,2专家
     */
    @NotNull(message = "回避类型不为空")
    @ApiModelProperty(value = "回避类型:1单位,2专家", required = true)
    @ListValue(values = {1, 2}, message = "回避类型:1单位,2专家")
    private Integer type;

    /**
     * 回避类型
     */
    @NotBlank(message = "回避类型不为空")
    @ApiModelProperty(value = "回避类型", required = true)
    @ListValue(strValues = {"单位", "专家"}, message = "回避类型:单位,专家")
    private String typeMean;

type只能输入数字12

typeMean只能输入字符串“单位”、“专家

方法二:

@Pattern注解

只能校验字符串,正则表达式为:“单位|专家

    /**
     * 回避类型
     */
    @NotBlank(message = "回避类型不为空")
    @ApiModelProperty(value = "回避类型", required = true)
    @Pattern(regexp = "单位|专家", message = "回避类型:单位,专家")
    private String typeMean;

typeMean只能输入字符串“单位”、“专家文章来源地址https://www.toymoban.com/news/detail-823339.html

到了这里,关于Java Validation 只能输入固定值(自定义校验注解、@Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【业务功能篇78】微服务-前端后端校验- 统一异常处理-JSR-303-validation注解

    5. 前端校验 我们在前端提交的表单数据,我们也是需要对提交的数据做相关的校验的 Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可 校验的页面效果 前端数据校验就搞定了。后端校验也是不可

    2024年02月11日
    浏览(104)
  • @Pattern、@NotNUll、@Length等校验注解的使用

    @ NotNull 注解来标记 MyObject 类的 property 属性不能为空。通过 Validation.buildDefaultValidatorFactory() 创建验证器工厂,然后使用 factory.getValidator() 获取验证器实例。然后,我们创建了一个 MyObject 实例,并将其传递给 validator.validate() 方法进行验证。验证结果存储在 SetConstraintViolationO

    2024年02月15日
    浏览(43)
  • Java自定义校验注解实现List、set集合字段唯一性校验

    在开发过程中,前端给后端传递集合,并且需要保证集合的实体类中的某些字段必须是惟一的,不能重复。 传递的集合: 集合对应的实体类: 如果我们要保证传递的name或者card必须是唯一的,不能重复,应该如何实现呢,此时可以通过自定义注解的方式实现。 @Documented @Do

    2024年02月14日
    浏览(40)
  • el-input校验,只能输入正整数

    一、表单校验方式:  二、el-input的type设置为number,然后去掉上下箭头  

    2024年02月14日
    浏览(51)
  • uniapp input框校验数据格式,只能输入汉字/数字/字母等

    input框常用的正则表达式 input class=“uni-input iptStyle” name=“input” placeholder=“未识别出信息” v-model=“form.fpNum” @input=“fpNumInput” maxlength=‘24’ / fpNumInput(e) { const o = e.target; const inputRule = / (0+)|[ d]+/g //修改inputRule 的值 this.$nextTick(function() { this.form.fpNum = o.value.replace(inputRule

    2024年02月03日
    浏览(46)
  • java的validation框架(参数校验)

    空值校验类:@Null,@NotNull,@NotEmpty,@NotBlank等 范围校验类:@Min,@Size,@Digits,@Future,@Negative等 其它校验类:@Email,@URL,@AssertTrue,@Pattern等 1. @NotNull(message = “用户id不能为空”) 没有设置值时会返回 设置为userInfo.setUserId(\\\"\\\");时不会返回 userInfo.setUserId(\\\" \\\");时不会返回 2.@Not

    2024年01月22日
    浏览(49)
  • java使用Validation进行数据校验

    在开发中,我们经常遇到参数校验的需求,比如用户注册的时候,要校验用户名不能为空、用户名长度不超过20个字符、手机号是合法的手机号格式等等。如果使用普通方式,我们会把校验的代码和真正的业务处理逻辑耦合在一起,而且如果未来要新增一种校验逻辑也需要在

    2024年02月06日
    浏览(35)
  • 后端表情包依赖+自定义注解实现校验

    开发过程中遇到小程序登记信息填写文本时可能输入表情包,需要后端校验 由于字段太多,所以用自定义注解的方式来实现 步骤1:在pom文件中加入表情包依赖 步骤2: 自定义注解类 步骤3: 在请求的实体使用这个注解,需要要在controller中加入@Validated注解,校验才会生效

    2024年02月16日
    浏览(33)
  • Spring Boot 中自定义数据校验注解

    在 Spring Boot 中,我们可以使用 JSR-303 数据校验规范来校验表单数据的合法性。JSR-303 提供了一些常用的数据校验注解,例如 @NotNull 、 @NotBlank 、 @Size 等。但是,在实际开发中,我们可能需要自定义数据校验注解来满足特定的需求。本文将介绍如何在 Spring Boot 中自定义数据校

    2024年02月10日
    浏览(53)
  • spring-boot 请求参数校验:注解 @Validated 的使用、手动校验、自定义校验

    spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。 spring-boot已经引入了基础包,所以直接使用就可以。 在属性上添加校验注解: 在Controller上添加 @Validated 注解 校验未通过时,可能看到: 在 @Validated 后面紧跟着追加BindingResult,

    2023年04月16日
    浏览(106)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包