jsr303,jsr 349自定义注解验证实现

以下为验证发布状态是否为以下字段

@Documented
@Constraint(validatedBy = {PublishStatusValidator.class })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@NotBlank
/**
 * Verify the status contains value
 * status default values {"pending","publish","invalid"}.
 */
public @interface PublishStatus {
    String[] status() default {"fabu1","fabu2","fabu3"};
    String message() default "状态值不匹配,值必须是{status}中的值";

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

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

    /**
     * Defines several {@code @Length} annotations on the same element.
     */
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
    @Retention(RUNTIME)
    @Documented
    public @interface List {
        PublishStatus[] value();
    }
}

上面我们还加了@NotBank,表示不能为空,当然这里看自己业务需求了。

继承与ConstraintValidator实现验证

public class PublishStatusValidator  implements ConstraintValidator<PublishStatus, CharSequence> {
    private CharSequence[] statusStr;

    @Override
    public void initialize(PublishStatus constraintAnnotation) {
        this.statusStr = constraintAnnotation.status();
    }

    @Override
    public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
        return Arrays.asList(statusStr).contains(value);
    }
}

使用方法

@PublishStatus
@PublishStatus(status = {"a","b","c"})
时间: 2024-10-17 22:33:50

jsr303,jsr 349自定义注解验证实现的相关文章

SpringMVC验证框架Validation自定义注解实现传递参数到国际化资源文件

关于SpringMVC验证框架Validation的使用方法,不是本篇的重点,可参见博文SpringMVC介绍之Validation 在使用Validation时,一定有朋友遇到过一个问题,那就是:无法传递参数到国际化资源文件properties错误描述中. 举个例子: User类中 @NotEmpty(message="{password.empty.error}") private String password; 资源文件validation_zh_CN.properties中为

[Java]利用拦截器和自定义注解做登录以及权限验证

1.自定义注解 需要验证登录的注解 package com.etaofinance.wap.common; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.Retention

SpringBoot08 请求方式、参数获取注解、参数验证、前后台属性名不一致问题、自定义参数验证注解、BeanUtils的使用

1 请求方式 在定义一个Rest接口时通常会利用GET.POST.PUT.DELETE来实现数据的增删改查:这几种方式有的需要传递参数,后台开发人员必须对接收到的参数进行参数验证来确保程序的健壮性 1.1 GET 一般用于查询数据,采用明文进行传输,一般用来获取一些无关用户信息的数据 1.2 POST 一般用于插入数据 1.3 PUT 一般用于数据更新 1.4 DELETE 一般用于数据删除 技巧01:一般都是进行逻辑删除(即:仅仅改变记录的状态,而并非真正的删除数据) 2 参数获取注解 2.1

jsr-303 参数校验—自定义校验注解

1.为什么要自定义? 通过上篇学习,了解到很多常用注解了,但是呢,总是有那么些需求.... 2.案例分析(手机号格式) 2.1.需要验证的实体 Bean public class LoginVo { @NotNull @IsMobile //自定义的注解 private String mobile; @NotNull @Length(min=32) private String password; //省略 get set 方法 } 2.2.自定义 IsMobile  注解类 import st

SpringMVC拦截器+Spring自定义注解实现权限验证

设计思路 主要针对需要登录后操作的接口进行校验.接入层在对外暴露接口后,网页.APP.第三方等等途径进行访问接口.用户请求首先会被SpringMVC拦截器拦截到,在拦截器里第一步就是需要校验用户的登录身份(由于是分布式系统这里采用的是userId+accessToken方式来校验),登录校验通过之后再进行用户权限校验,此时会自动拦截@AuthValidate注解的method(核心),如果权限校验失败则抛出权限不足异常,否则校验通过之后再执行具体接口并返回结果. 1.自定义注解 1 packag

自定义注解标签验证

package com.pt.modules.contract.utils.Customannotations; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; /** * * @

SpringMVC与SiteMesh2.4无缝整合并借助JSR303规范实现表单验证

首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ht

hibernate validation内置注解及自定义注解

1 Bean Validation 中内置的 constraint 2 @Null 被注释的元素必须为 null 3 @NotNull 被注释的元素必须不为 null 4 @AssertTrue 被注释的元素必须为 true 5 @AssertFalse 被注释的元素必须为 false 6 @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 7 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 8 @DecimalMin(value)

SpringMVC中实现Bean Validation(JSR 303 JSR 349 JSR 380)

JSR 303是针对bean数据校验提出的一个规范.使用注解方式实现数据校验. 每个注解的用法这里就不多介绍,请移步JSR 303 - Bean Validation 介绍及最佳实践 笔者上面提到的JSR303是专家组成员向JCP提交的第一版Bean Validation, 主流Bean Validation使用Hibernate的实现,本文使用hibernate-validator 各个版本的规范对应关系如下: JSR 380 (Bean Validation 2.0) JSR 349 (Be