一、引入iServer的Jar包
需要到iServer安装目录/webapps/iserver/WEB-INF/lib
下寻找以下几个jar包,把它引入到项目里:
iserver-all-*.jar
service-model-*.jar
rest-sdk-*.jar
然后再引入几个maven依赖包:
<dependency>
<groupId>io.github.xsavikx</groupId>
<artifactId>org.restlet</artifactId>
<version>2.4.4</version>
</dependency>
<dependency>
<groupId>io.github.xsavikx</groupId>
<artifactId>org.restlet.ext.json</artifactId>
<version>2.4.4</version>
</dependency>
<dependency>
<groupId>ch.qos.cal10n</groupId>
<artifactId>cal10n-api</artifactId>
<version>0.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-ext</artifactId>
<version>1.7.32</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.0.1-jre</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
二、数据服务或图层服务准备
首次发布:需要在iDesktop X中把工作空间发布到iServer上,需要发布数据服务和地图服务,最好是PostgreSQL数据库型工作空间,不建议使用文件型工作空间,因为不利于后续从数据库直接读数。
如果已经发布了服务,则需要启用具体数据服务的编辑功能,把数据服务的服务地址记下来,后续会用到。
三、编写Java代码对数据服务进行操作
准备工作:准备数据服务的provider
/* 准备数据服务 */
RestDataProviderSetting providerSetting = new RestDataProviderSetting();
providerSetting.restServiceRootURL = "数据服务的服务地址";
RestDataProvider provider = new RestDataProvider(providerSetting);
根据SMID查询特定属性表下的Feature
QueryParameter query = new QueryParameter();
query.name = "属性表的名";
query.ids = new int[]{28}; // 这里填写SMID的值
List<Feature> result = provider.getFeature("数据源的名", query);
根据任意属性查询属性表里的Feature
QueryParameter query = new QueryParameter();
query.name = "属性表的名";
query.attributeFilter="code='MyCode-20240904-01'"; // 根据编码字段查询
List<Feature> result = provider.getFeature("数据源的名", query);
更新属性表里的任意一行的属性
Feature test = new Feature();
test.setID(28);
test.fieldNames = new String[]{"name"};
test.fieldValues = new String[]{"中央仓库3"};
EditResult editResult = provider.updateFeatures("数据源的名", "属性表的名", List.of(test));
向属性表里添加一行数据
Feature test =new Feature();
test.fieldNames = new String[]{"name"};
test.fieldValues = new String[]{"中央仓库5"};
test.geometry=new Geometry(); // 这里的Geometry对象需要指定类型和边缘点的集合,这里略
provider.addFeatures("数据源的名","属性表的名", List.of(test));
根据SMID删除一个Feature
QueryParameter query = new QueryParameter();
query.name = "属性表的名";
query.ids = new int[]{28}; // 这里填写SMID的值
provider.deleteFeatures("数据源的名", query);
根据查询删除符合条件的Feature
QueryParameter query = new QueryParameter();
query.name = "属性表的名";
query.attributeFilter="code='MyCode-20240904-01'"; // 根据编码字段查询
provider.deleteFeatures("数据源的名", query);