springboot 使用自定义注解校验传入参数

eg:获取传入学生年纪,小于25不通过。 

主要分两步骤:

             1. 自定义注解

              2.AOP  切面拦截

1、pom.xml   引入相关依赖

        
        
            org.springframework.boot
            spring-boot-starter-aop
        
        
        
            org.aspectj
            aspectjrt
        

        
            org.aspectj
            aspectjweaver
        
        
            cglib
            cglib
            3.2.6
        

        
            com.alibaba
            fastjson
            1.2.27
        

2、实现自定以注解 (具体注解就不多做解释)

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented  //-- 生成javadoc 文档
// @Inherited  --子类拥有父类的注解 @Inherited注解只对那些@Target被定义为ElementType.TYPE的自定义注解起作用。
public @interface StudentAnnotion {

    String name() ;
    int age() default 18;

}

3、使用该注解

import com.bfy.demo.annotation.StudentAnnotion;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 测试注解
 */
@RestController
public class TestAnnotationController {

    @RequestMapping( value = "man")
    @StudentAnnotion(name = "莉莉",age = 25)  
    public String firstTest (@RequestParam  String name,@RequestParam int age ) {
        return name + age;
    }


}

4、创建切面对该注解拦截

import com.bfy.demo.annotation.StudentAnnotion;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class StudentAnnotionspect {

    @Pointcut("@annotation(com.bfy.demo.annotation.StudentAnnotion)")  // 切入点 为该注解
    private void pointcut() {
    }

    @Around("pointcut() &&  @annotation(studentAnnotion) ")
    public Object around(ProceedingJoinPoint joinPoint, StudentAnnotion studentAnnotion) throws Throwable {

        // 获取传递参数
        Object[] args = joinPoint.getArgs();
        Integer age = (Integer) args[1];
        if (studentAnnotion.age() > age) {
            return "年纪太小";
        }
        return joinPoint.proceed();
    }

}

5、效果显示

springboot 使用自定义注解校验传入参数_第1张图片         springboot 使用自定义注解校验传入参数_第2张图片

你可能感兴趣的:(spring)