Spring 中注解的应用 小demo

首先一个学生类:

/**因为这个是之前测试的例子就直接拿来用了**/
public class Student {


    private Long id;


    @MyRange(max=20,min=2)
    private String name;


    private int age;


    private String address;

    private String testId;
    private int testCount;


    public Student() {}


    public Student(Long id, String name, int age, String address,String testId,int testCount) {

        this.id = id;

        this.name = name;

        this.age = age;

        this.address = address;
        this.testId=testId;
        this.testCount=testCount;

    }

    @Override
    public boolean equals(Object o) {

        if (this == o) return true;

        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        return age == student.age &&

                Objects.equals(id, student.id) &&

                Objects.equals(name, student.name) &&

                Objects.equals(address, student.address);

    }

    @Override
    public String toString() {
        return "Student{id=" + id +",  + name + '\'' +age=" + age +", address='" + address + '\'' +'}';
    }

    @Override

    public int hashCode() {
        return Objects.hash(id, name, age, address);
    }


    public Long getId() {
        return id;
    }


    public void setId(Long id) {
        this.id = id;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public int getAge() {
        return age;
    }


    public void setAge(int age) {
        this.age = age;
    }


    public String getAddress() {
        return address;
    }


    public void setAddress(String address) {
        this.address = address;
    }

    public String getTestId() {
        return testId;
    }

    public void setTestId(String testId) {
        this.testId = testId;
    }

    public int getTestCount() {
        return testCount;
    }

    public void setTestCount(int testCount) {
        this.testCount = testCount;
    }
}

一个注解类:

 


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyRange {

    int max() default 255;
    int min () default 0;

}

 

 

一个控制层:

 

@RequestMapping("zoe/test")
@Controller
public class TestOnew {

    @ResponseBody
    @RequestMapping("/test1")
    public boolean testOne(){
        Student s=new Student();
        s.setName("eiiiiiiii88888888888888888888iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiieiiiiiiiiiiiiiiiiiii");
        try {
            checkParam(s);
        }catch (IllegalArgumentException | IllegalAccessException e){
            e.printStackTrace();
            return false;
        }
        return true;
    }

    private void checkParam(Student s) throws IllegalArgumentException, IllegalAccessException {
        Class c=s.getClass();

        Field[] f=c.getDeclaredFields();
        for (Field ff:f){
            MyRange myRange =ff.getAnnotation(MyRange.class);//获取字段的注解类
            if(myRange !=null){
                ff.setAccessible(true);//因为是私有方法 所以要设置为TRUE
                Object value=ff.get(s);//获取值
                if(ff.get(s) instanceof  String){
                    String valueStr= (String) value;
                    //获取该字段注解上的最大和最小值 
                    int max= myRange.max();
                    int min= myRange.min();
                    if(valueStr.length()<min||valueStr.length()>max){
                        throw new IllegalArgumentException("Invalid Field: "+ff.getName());
                    }
                }
            }
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值