java 實現反射 json動態轉實體類--fastjson
阿新 • • 發佈:2021-02-22
我就廢話不多說了,大家還是直接看程式碼吧~
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(); } } }
補充:使用fastjson 進行jsonObject轉實體類物件
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency>
首先引入相關jar包,
假設有一個實體類User
public class User{ private int id; private String name; }
然後通過fastJson進行型別轉換
public static void main(String[] args){ String userString = "{"id":1,"name","lz"}"; JSONObject userJson = JSONObject.parseObject(userString); User user = JSON.toJavaObject(userJson,User.class); }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。