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

 更新时间:2021年02月19日 09:57:37   作者:HL_123123  
这篇文章主要介绍了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();
		}
	}
}

补充:使用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);
  
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • 使用jmeter实现对jar包的调用方式

    使用jmeter实现对jar包的调用方式

    这篇文章主要介绍了使用jmeter实现对jar包的调用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • java异或加密算法

    java异或加密算法

    这篇文章主要介绍了java异或加密算法,有需要的朋友可以参考一下
    2013-12-12
  • SpringBoot 整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    SpringBoot 整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    本文主要介绍了SpringBoot 整合MyBatis+MyBatis-Plus+MyBatisX插件使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • JAVA后端实现JWT令牌的示例

    JAVA后端实现JWT令牌的示例

    本文主要介绍了JAVA后端实现JWT令牌的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Mybatis批量修改联合主键数据的两种方法

    Mybatis批量修改联合主键数据的两种方法

    最近遇上需要批量修改有联合主键的表数据,找很多资料都不是太合适,最终自己摸索总结了两种方式可以批量修改数据,对Mybatis批量修改数据相关知识感兴趣的朋友一起看看吧
    2022-04-04
  • Java中的ThreadLocal与ThreadLocalMap详解

    Java中的ThreadLocal与ThreadLocalMap详解

    这篇文章主要介绍了Java中的ThreadLocal与ThreadLocalMap详解,ThreadLocal 是一个线程局部变量,其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,需要的朋友可以参考下
    2023-09-09
  • Spring cloud Hystrix注解初始化源码过程解读

    Spring cloud Hystrix注解初始化源码过程解读

    这篇文章主要为大家介绍了Hystrix初始化部分,我们从源码的角度分析一下@EnableCircuitBreaker以及@HystrixCommand注解的初始化过程,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2023-12-12
  • Java中使用instanceof判断对象类型的示例

    Java中使用instanceof判断对象类型的示例

    在List<Object>中遍历Object时,先判断类型,再定向转换,本文给大家介绍Java中使用instanceof判断对象类型,感兴趣的朋友跟随小编一起看看吧
    2023-08-08
  • Java对象序列化操作详解

    Java对象序列化操作详解

    这篇文章主要介绍了Java对象序列化操作,简单描述了Java序列化相关概念、原理并结合实例形式总结分析了常见序列化操作相关定于与使用技巧,需要的朋友可以参考下
    2018-09-09
  • IntelliJ IDEA 2022.2最新版本激活教程(亲测可用版)永久激活工具分享

    IntelliJ IDEA 2022.2最新版本激活教程(亲测可用版)永久激活工具分享

    Jetbrains官方发布了 IntelliJ IDEA2022.2 正式版,每次大的版本更新,都会有较大的调整和优化,除本次更新全面拥抱 Java 17 外,还有对IDE UI界面,安全性,便捷性等都做了调整和优化完善,用户体验提升不少,相信后面会有不少小伙伴跟着更新
    2022-08-08

最新评论