首先一个学生类:
/**因为这个是之前测试的例子就直接拿来用了**/
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());
}
}
}
}
}
}