我正在使用Facade模式来实现JSON转换。我有POJO类对应多个JSON结构。我有与每个POJO类对应的外观类。有一个AbstractFacade,它具有将JSON条目转换为Java对象的实现。
所以,这是一个例子:
books.json
[
{
category : "self-help",
count :268
},
{
category : "fiction",
count :268
}
]
Book.java
public class Book {
private String category;
private int count;
//getters and setters
}
BookFacade.java
public class BookFacade extends AbstractFacade<Book> {
public BookFacade() {
super(Book.class);
// TODO Auto-generated constructor stub
}
@Override
public ArrayList<Book> readFileOfObjectList(String filePath){
try {
return super.readFileOfObjectList(filePath);
} catch (JsonParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
AbstractFacade.java
public class AbstractFacade<T> implements JSONFileUtil{
private Class<T> entityClass;
public Class<T> getEntityClass() {
return entityClass;
}
public void setEntityClass(Class<T> entityClass) {
this.entityClass = entityClass;
}
public AbstractFacade(Class<T> entityClass) {
super();
this.entityClass = entityClass;
}
class ListT extends ArrayList<T>{
}
@Override
public ListT readFileOfObjectList(String fileName) throws JsonParseException, JsonMappingException, IOException {
// TODO Auto-generated method stub
ObjectMapper mapper = new ObjectMapper();
ListT list=mapper.readValue(new File(fileName), new TypeReference<ListT>(){});
System.out.println("In abstract facade:"+list.get(0).getClass().getName());
return list;
}
@Override
public void writeFile(String fileName, Object data) throws IOException {
// TODO Auto-generated method stub
}
}
因此,我在主程序中创建了一个BookFacade对象,并调用方法readFileOfObjectList
。我得到一个ArrayList,但其中的对象是LinkedHashMap类型。我在StackOverflow中检查了很多答案。但它们都不适合我。你能帮忙吗?