3.10.7. 以 JSON 格式导入和导出实体

平台提供了一个 API,用于以 JSON 格式导出和导入实体关系图。它可以通过 EntityImportExportAPI 接口在中间件使用,也可以通过 EntityImportExportService 在客户端使用。这些接口具有一组相同的方法,如下所述。导出/导入实现委托给 EntitySerializationAPI 接口,也可以直接使用这个接口。

  • exportEntitiesToJSON() - 将一组实体序列化为 JSON。
  1. @Inject
  2. private EntityImportExportService entityImportExportService;
  3. @Inject
  4. private GroupDatasource<Customer, UUID> customersDs;
  5. ...
  6. String jsonFromDs = entityImportExportService.exportEntitiesToJSON(customersDs.getItems());
  • exportEntitiesToZIP() - 将一组实体序列化为 JSON,并将 JSON 文件打包为 ZIP 文件。在下面的示例中,使用FileLoader接口将 ZIP 文件保存到文件存储中:
  1. @Inject
  2. private EntityImportExportService entityImportExportService;
  3. @Inject
  4. private GroupDatasource<Customer, UUID> customersDs;
  5. @Inject
  6. private Metadata metadata;
  7. @Inject
  8. private DataManager dataManager;
  9. ...
  10. byte[] array = entityImportExportService.exportEntitiesToZIP(customersDs.getItems());
  11. FileDescriptor descriptor = metadata.create(FileDescriptor.class);
  12. descriptor.setName("customersDs.zip");
  13. descriptor.setExtension("zip");
  14. descriptor.setSize((long) array.length);
  15. descriptor.setCreateDate(new Date());
  16. try {
  17. fileLoader.saveStream(descriptor, () -> new ByteArrayInputStream(array));
  18. } catch (FileStorageException e) {
  19. throw new RuntimeException(e);
  20. }
  21. dataManager.commit(descriptor);
  • importEntitiesFromJSON() - 反序列化 JSON 并根据由 entityImportView 参数(参阅 JavaDocs 中的 EntityImportView 类)描述的规则持久化反序列后的实体。如果一个实体在数据库中不存在,则会创建该实体。否则,将更新 entityImportView 中指定的现有实体的字段。

  • importEntitiesFromZIP() - 读取包含 JSON 文件的 ZIP 存档,像 importEntitiesFromJSON() 方法一样反序列化 JSON 并持久化反序列化的实体。

  1. @Inject
  2. private EntityImportExportService entityImportExportService;
  3. @Inject
  4. private FileLoader fileLoader;
  5. private FileDescriptor descriptor;
  6. ...
  7. EntityImportView view = new EntityImportView(Customer.class);
  8. view.addLocalProperties();
  9. try {
  10. byte[] array = IOUtils.toByteArray(fileLoader.openStream(descriptor));
  11. Collection<Entity> collection = entityImportExportService.importEntitiesFromZIP(array, view);
  12. } catch (FileStorageException e) {
  13. throw new RuntimeException(e);
  14. }