3.10.7. 以 JSON 格式导入和导出实体
平台提供了一个 API,用于以 JSON 格式导出和导入实体关系图。它可以通过 EntityImportExportAPI
接口在中间件使用,也可以通过 EntityImportExportService
在客户端使用。这些接口具有一组相同的方法,如下所述。导出/导入实现委托给 EntitySerializationAPI
接口,也可以直接使用这个接口。
exportEntitiesToJSON()
- 将一组实体序列化为 JSON。
@Inject
private EntityImportExportService entityImportExportService;
@Inject
private GroupDatasource<Customer, UUID> customersDs;
...
String jsonFromDs = entityImportExportService.exportEntitiesToJSON(customersDs.getItems());
exportEntitiesToZIP()
- 将一组实体序列化为 JSON,并将 JSON 文件打包为 ZIP 文件。在下面的示例中,使用FileLoader接口将 ZIP 文件保存到文件存储中:
@Inject
private EntityImportExportService entityImportExportService;
@Inject
private GroupDatasource<Customer, UUID> customersDs;
@Inject
private Metadata metadata;
@Inject
private DataManager dataManager;
...
byte[] array = entityImportExportService.exportEntitiesToZIP(customersDs.getItems());
FileDescriptor descriptor = metadata.create(FileDescriptor.class);
descriptor.setName("customersDs.zip");
descriptor.setExtension("zip");
descriptor.setSize((long) array.length);
descriptor.setCreateDate(new Date());
try {
fileLoader.saveStream(descriptor, () -> new ByteArrayInputStream(array));
} catch (FileStorageException e) {
throw new RuntimeException(e);
}
dataManager.commit(descriptor);
importEntitiesFromJSON()
- 反序列化 JSON 并根据由entityImportView
参数(参阅 JavaDocs 中的EntityImportView
类)描述的规则持久化反序列后的实体。如果一个实体在数据库中不存在,则会创建该实体。否则,将更新entityImportView
中指定的现有实体的字段。importEntitiesFromZIP()
- 读取包含 JSON 文件的 ZIP 存档,像importEntitiesFromJSON()
方法一样反序列化 JSON 并持久化反序列化的实体。
@Inject
private EntityImportExportService entityImportExportService;
@Inject
private FileLoader fileLoader;
private FileDescriptor descriptor;
...
EntityImportView view = new EntityImportView(Customer.class);
view.addLocalProperties();
try {
byte[] array = IOUtils.toByteArray(fileLoader.openStream(descriptor));
Collection<Entity> collection = entityImportExportService.importEntitiesFromZIP(array, view);
} catch (FileStorageException e) {
throw new RuntimeException(e);
}