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();
		}

	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章