Discuss / Java / 使用@Range注解来检查Java Bean的字段。如果字段类型是String,就检查String的长度,如果字段是int,就检查int的范围。

使用@Range注解来检查Java Bean的字段。如果字段类型是String,就检查String的长度,如果字段是int,就检查int的范围。

Topic source

净净一隅

#1 Created at ... [Delete] [Delete and Lock User]

package annotationTest;

import annotationTest.Person;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

public class test {

public static void main(String[] args) {

try {

Person person1=new Person("11",23);

Person person2=new Person("luo",19);

person1.check(person1);

person2.check(person2);

}catch (Exception e) {

e.printStackTrace();

}

}

package annotationTest;

import java.lang.annotation.Retention;

import java.lang.annotation.Target;

import java.lang.annotation.ElementType;

import java.lang.annotation.RetentionPolicy;

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

public @interface Range {

int min() default 18;

int max() default 55;

package annotationTest;

import static tools.LogUtils.log;

import java.lang.reflect.Field;

import annotationTest.Range;

public class Person {

@Range(min=22,max=55)

public int age;

@Range(min=1,max=20)

public String name="";

public Person(String name,int age) {

this.setName(name);

this.setAge(age);

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public void check(Person person) throws IllegalArgumentException, IllegalAccessException{

log.info(person.getClass().getFields().length);

for(Field field: Person.class.getFields()) {

Range range=field.getAnnotation(Range.class);

if(range!=null) {

Object value=field.get(person);

if((value instanceof String) && field.getName().equals("name")) {

if((((String) value).length()<range.min()) || ((String) value).length()>range.max()) {

throw new IllegalArgumentException("Invalid name: "+field.getName());

}

}

if((value instanceof Integer) && field.getName().equals("age")) {

if(((Integer) value)<range.min() || ((Integer) value)>range.max()) {

throw new IllegalArgumentException("Invalid age: "+field.getName());

}

}

}

}

}

}

}


  • 1

Reply