java 反射 json动态转实体类--fastjson

package test.refect;

public class Student {
	// 姓名
	private String name;
	// 年龄
	private String age;
	// 住址
	private String address;

	public String getName() {
		return name;
	}

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

	public String getAge() {
		return age;
	}

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

	public String getAddress() {
		return address;
	}

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

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", address=" + address + "]";
	}
	
	public void sayHello(Book book){
		System.out.println(book.getName());
		
	}
}
package test.refect;

public class Book {
	private String name;

	public String getName() {
		return name;
	}

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

}

package test.refect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.alibaba.fastjson.JSONObject;

public class ExecuteWithFastJson {

	public static <T> void main(String[] args) {
		
		// Student str --> Student 主类
		String str = "test.refect.Student";
		Class<?> clazz = null;
		try {
			clazz = Class.forName(str);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// Book实体 str --> Book 参数类
		String bookStr = "test.refect.Book";
		Class<?> bookClazz = null;
		try {
			bookClazz = Class.forName(bookStr);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// json --> Book 将参数类转为JSONOBJECT
		String bookJson = "{\"name\":\"Java\"}";
		

		// 实例化参数类
		T t = (T) JSONObject.parseObject(bookJson, bookClazz);
		
		// 将参数类注入到主类
		Method method =null;
		try {
			method = clazz.getDeclaredMethod("sayHello", bookClazz);
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// 执行主类
		try {
			method.invoke(clazz.newInstance(), t);
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}


发布了69 篇原创文章 · 获赞 16 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/huanglei1234567890/article/details/80542596
今日推荐