我正在制定一个有这些要求的框架
开发人员开发他们的类(Bean),如下所示
class BeanA{
int id;
String appName;
public void save()
}
class BeanB{
int id;
String userName;
public void save()
}
orchestratoon.csv
也是这样定义的,开发人员在这里输入他们的类
org.example.BeanA, http://fetch/bean/a/from/this/url
org.example.BeanB, http://fetch/bean/b/from/this/url
org.example.BeanC, http://fetch/bean/c/from/this/url
在此之后,我必须编写一个平台服务,它将从orchestration.csv
文件中给定的url
获取Bean数据,然后在fully qualified name
提供的类中呈现
我的问题是,如何反序列化提取到类中的json,并调用该bean的save
方法。
下面是伪代码。
ObjectMapper objectMapper = new ObjectMapper();
for className, URL in CSV
String json = getObject(url)
// Here is the problem, how do I deserialize it using ObjectMapper
objectMapper.readValue(json, Class.forName(className)); ---> It does not work , compile time error because of Class.forName and how do I call a save on it
任何帮助都会
2条答案
按热度按时间mkshixfv1#
根据您的具体情况,提取接口或抽象类中的
save()
方法。大多数情况下,接口是更好的选择:让
BeanA
、BeanB
等实现它,将反序列化结果强制转换为MyInterface
并调用save()
。ippsafx72#
假设您成功地从URL中读取了表示特定类的JSON字符串,并且您知道类名,那么您可以使用
ObjectMapper
类及其方法<T> T readValue(String content, Class<T> valueType)
。将json字符串作为内容放置,并作为类使用public static Class<?> forName(String className) throws ClassNotFoundException
。请参阅ObjectMapper javadoc here。另外,如果您希望它更简单,我编写了自己的JsonUtil,您甚至不必示例化ObjectMapper。您的代码将如下所示:在本例中,类
JsonUtils
附带了由我编写和维护的开源MgntUtils库。请参见the Javadoc for JsonUtils class。MgntUtils库可以作为Maven工件从Maven Central获得,也可以从Github连同源代码和Javadoc一起获得