SpringMVC bean validator 自定义注解

有时候现有的验证注解满足不了部分业务需求,所以就有了扩展自定义注解。

1.添加注解类

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.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * User: zhoujingjie
 * Date: 14-10-31
 * Time: 下午6:00
 */
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { PhoneNoValidator.class})
public @interface PhoneNo {

    //默认错误消息
    String message() default "手机号码错误";

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

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

    //指定多个时使用
    @Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })
    @Retention(RUNTIME)
    @Documented
    @interface List {
        PhoneNo[] value();
    }
}

自定义注解需要自定义validator,所以注解里变量也不是强制需要,可以就一个message也可以

2.添加PhoneNoValidator

import org.apache.commons.lang.StringUtils;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
 * 手机号码验证
 * User: zhoujingjie
 * Date: 14-11-1
 * Time: 上午10:45
 */
public class PhoneNoValidator implements ConstraintValidator<PhoneNo,String> {

    @Override
    public void initialize(PhoneNo constraintAnnotation) {
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if(StringUtils.isEmpty(value))
            return true;
        if(value.matches("((\\+86)|(86))?1[3|4|5|8]\\d{9}")){
            return true;
        }
        return false;
    }
}

3.最后

完成,一个简单的自定义注解就完工了。使用方式与其他注解一模一样

时间: 2024-10-18 01:27:26

SpringMVC bean validator 自定义注解的相关文章

在springMVC中使用自定义注解来进行登录拦截控制

1:java注解使用是相当频繁,特别是在搭建一些框架时,用到类的反射获取方法和属性,用的尤其多. java中元注解有四个: @Retention     @Target     @Document   @Inherited: 1 @Retention:注解的保留位置 2 @Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含 3 @Retention(RetentionPolicy.CLASS) //默认的保留策略,注解会在c

springmvc 下使用自定义注解获取登录信息

大家的项目中在controller层是怎样获取登录用户的信息呢? User loginUser=LoginUtil.getLoginUser(); 我想有些同学是通过这样获得的,如果这样实现的话, 恭喜你,你的Controller层已经丧失了单元测试的能力. 因为执行这个controller所需要的参数并没有完全通过参数列表来获得,而依赖于全局环境(web环境) 如果这样做使得springmvc为环境解耦所设计的整个架构变得毫无意义. 那怎么样写才算是高大上呢?先贴出最后效果 @RequestM

springmvc之自定义注解(annotation)

参考:日志处理 三:Filter+自定义注解实现 系统日志跟踪功能 1.项目结构 2.pom.xml,添加需要依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mav

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

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

利用自定义注解在SpringMVC中实现自定义权限检查

先描述一下应用场景,基于Spring MVC的WEB程序,需要对每个Action进行权限判断,当前用户有权限则允许执行Action,无权限要出错提示.权限有很多种,比如用户管理权限.日志审计权限.系统配置权限等等,每种权限还会带参数,比如各个权限还要区分读权限还是写权限. 想实现统一的权限检查,就要对Action进行拦截,一般是通过拦截器来做,可以实现HandlerInterceptor或者HandlerInterceptorAdapter,但是每个Action都有不同的权限检查,比如getUs

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

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

springmvc 自定义注解 以及自定义注解的解析

1,自定义注解名字 @Target({ElementType.TYPE, ElementType.METHOD})   //类名或方法上@Retention(RetentionPolicy.RUNTIME)//运行时 @component//自定义多个注解,且在一个类中添加两个或以上的,只需要加一个 否则会实例化多次.public @interface SocketMapping { String value() default "";//参数} 2.测试类 @SocketMappin

Spring+SpringMVC+Mybatis 利用AOP自定义注解实现可配置日志快照记录

目的: 需要对一些事物的操作进行日志记录,如果在service内进行记录,大量的代码重复,并且维护比较麻烦.所以采用AOP的方式对service进行拦截.使用自定义注解的目的则是判断是否需要记录日志和传递额外的信息. 方式 本次解决方案十分感谢博主-跳刀的兔子的博文 本文绝大部分参考与本文,略有不同,所以做一些整理,博主的文章更详细一些. 1.首先新建自定义注解 @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @

自定义注解@Bean和@Resource 实现SpringIOC

在实际项目开发中,基本已经离不开spring框架了,而spring框架的成功之处在于起IOC以及AOP强大的解耦功能.今天给大家带来自己所简单实现的一个IOC注入. 编写@Bean以及@Resource 注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Bean { String value(); } @Target(ElementType.FIELD) @Retention(Re