3.9.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. }