最近总是碰到有人问Java如何访问SuperMap iServerJava6R的服务,由于目前SuperMap iServerJava6R不支持RMI访问访问,所以考虑使用Java直接访问REST的API。

环境准备:

1、开发工具 MyEclipse,服务器iServerJava6R

2、HttpComponents及Org.json类库,第一个http协议的开源Java客户端工具库,org.json是Json库,这两个都在iServerJava6R依赖库中,直接调用即可。如下图为所用类库,可以直接在iServerJava6R安装目录下\webapps\iserver\WEB-INF\lib找到:

3、iServerJava6R的REST API的文档

开发思路:

1、根据REST API构造参数类。

2、调用HttpComponents发送请求,解析结果

3、展现结果,一般使用地图

实现一个简单的吧,就调用distance,量算距离,上代码吧:

1、参数类,distance接口需要两个参数一个是Point2D数组,另外一个是一个枚举单位,我一般习惯使用以米为单位,所以直接用单位METER了。

参数类/*** 参数类* @author awei20081**/
public class Point2D {private double x ;private double y;public Point2D(double x,double y){this.x = x;this.y =y;}public double getX() {return x;}public void setX(double x) {this.x = x;}public double getY() {return y;}public void setY(double y) {this.y = y; }
}

2、发送请求与解析,这里distance接口是一个get请求,所以构造调用HttpComponents的HttpGet对象,代码如下:

请求发出与解析import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;public class getDemo {public final static void main(String[] args) throws Exception {//构建请求的URLString url="http://localhost:8090/iserver/services/map-world/rest/maps/%E4%B8%96%E7%95%8C%E5%9C%B0%E5%9B%BE/distance.rjson?";      //构造参数ArrayList<Point2D> arrayList = new ArrayList<Point2D>();arrayList.add(new Point2D(0,0));arrayList.add(new Point2D(10,10));//GET的URL,参数直接加URL后URL uri = new URL(url+URLEncoder.encode("point2Ds="+toJSONArray(arrayList),"UTF-8")+"&unit=METER");HttpGet httpget=new HttpGet(uri.toString());//执行http的get请求HttpResponse response=new DefaultHttpClient().execute(httpget);//发送GET,并返回一个HttpResponse对象,相对于POST,省去了添加NameValuePair数组作参数if(response.getStatusLine().getStatusCode()==200){//如果状态码为200,就是正常返回String result=EntityUtils.toString(response.getEntity());//得到返回的字符串JSONObject jsresult = new JSONObject(result);System.out.println("长度为"+jsresult.get("distance")+"  "+jsresult.getString("unit"));//打印输出}     }  public static StringBuilder toJSONArray(ArrayList<Point2D> arrayList){StringBuilder string = new StringBuilder();string.append("[");for (int i = 0; i < arrayList.size()-1; i++) {JSONObject jsObject = new JSONObject(arrayList.get(i));string.append(jsObject.toString()+",");}JSONObject jsObject = new JSONObject(arrayList.get(arrayList.size()-1));string.append(jsObject.toString());string.append("]");return string;}
}

备注:这个地方比较纠结,我第一用HttpComponents碰到比较多的问题列举如下阅读时候可以参考一下:

(1)url可以直接获取,即http://localhost:8090/iserver/services/map-world/rest/maps/世界地图/distance.rjson,但是不能直接用,因为需要对中文进行编码,而且不能直接调用URLEncoder直接对这个url整体进行编码,此处我图简单直接对 世界地图 进行编码为:/%E4%B8%96%E7%95%8C%E5%9C%B0%E5%9B%BE,所以url为http://localhost:8090/iserver/services/map-world/rest/maps/%E4%B8%96%E7%95%8C%E5%9C%B0%E5%9B%BE/distance.rjson,可以逐段解析url进行编码。

(2)、如果直接用org.json类库中JSONArray构造解析Point2D数组,解析结果不太对,所以我直接构造一个toJSONArray来对Point2D数组进行处理。
(3)、默认浏览器对url进行编码处理时候使用的是utf-8编码,而且iServerJava6R对请求返回结果的编码为utf-8。

3、结果展示,此处偷懒了直接调用println函数输出。

长度为1570277.6641936298  METER

上面只是一个简单的思路介绍,也许对高手很简单,但是毕竟初次学习,记录下来以备后查吧。

转载于:https://www.cnblogs.com/awei20081/archive/2011/06/19/2084576.html

Java调用SuperMap iServerJava6R的REST API相关推荐

  1. Java调用百度OCR文字识别API实现图片文字识别软件

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...

  2. 使用java调用阿里云车牌识别API

    实现车牌识别功能我采用调用阿里云车牌识别API的方法,我使用的是eclipse,jdk 1.8,Tomcat 9.0 1.进入阿里云主页先创建阿里云账号 2.在控制台的头像那里找到AccessKey管 ...

  3. Java调用SMS短信通API实现发短信功能

    今天想实现在Java程序中实现发送短信的功能,找了很多的短信平台,大多数都会有免费的体验短信数量,最后选择了中国网建的SMS短信平台,过程如下: 1.使用前需要注册,注册地址为:http://sms. ...

  4. java 调用native api_Windows和Native API中的系统调用?

    我有兴趣在没有导入的程序集中进行Windows API调用(作为教育练习),所以我编写了以下FASM程序集来执行NtDll!NtCreateFile所做的事情 . 这是我的64位版本的Windows( ...

  5. Java调用百度AI开放平台API

    百度AI开放平台 百度AI开放平台是全球领先的人工智能服务平台,面向开发者及企业开放120多项全球领先的AI能力和软硬一体组件,并提供 EasyDL定制化训练平台.对话系统开发平台UNIT.自定义模板 ...

  6. 安卓JAVA调用解析青云客聊天API示例

    之前玩QQ机器人时调用过青云客的聊天api,感觉问答并不符合预期. private static String 封装(String question) {//名字随意String answer = & ...

  7. java 调用微信api发送消息

    要在 Java 中调用微信 API 发送消息,你需要做的第一步是在微信公众平台中注册自己的公众号,然后获取到自己的 AppID 和 AppSecret. 然后你可以使用微信公众平台提供的开发文档,来了 ...

  8. java ocr api_Java调用百度OCR文字识别API实现图片文字识别软件

    Java调用百度OCR文字识别API实现图片文字识别软件 原创isinple 发布于2019-01-06 13:35:59 阅读数 1296 收藏 展开 java_baidu_ocr Java调用百度 ...

  9. java调用ocr识别api_Java文字识别软件-调用百度ocr实现文字识别

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 项目源代码在文末,放到了GitHub上 - https://github.com/Ymy214/java_bai ...

最新文章

  1. 学习编程能够从事哪些行业?
  2. 797C C. Minimal string
  3. 周立波贼经典的话31-40
  4. 使用jedis实现Redis消息队列(MQ)的发布(publish)和消息监听(subscribe)
  5. Android TextView全属性
  6. python中代理模式分为几种_Python设计模式之代理模式实例详解
  7. elasticsearch的Linux下安装报错问题解决
  8. celery java_Python的Java Celery项目相当于什么?
  9. python为什么那么多人点赞_python为何会火遍全球?它究竟是什么呢?阿里大佬告诉你答案...
  10. Tosca:设置执行结束时间
  11. 刘强东的漫漫情路:龚晓京、西红柿、奶茶...
  12. [编程题]雀魂启动!
  13. 7个实用的Python自动化代码,技术改变生活,不再重复
  14. [USACO 2009 Dec G]Video Game Troubles-----分组背包的改良版
  15. 用人人商城也能玩转心愿众筹了,创意无限,代码皆可实现
  16. vue开发web端实现列表左右联动效果
  17. Mac无缝更换电脑--数据迁移
  18. 高边坡监测主要监测的内容
  19. 谈软件系统的标准化和产品化
  20. WebGL Babylon GlowLayer 解决自发光材质穿透问题

热门文章

  1. Day 16 Linux 文件属性
  2. 最后一个页面:构建电影详情页面
  3. 代码从GCC到MSVC的移植
  4. PostgreSQL 会话级资源隔离探索
  5. 包含头文件的问题之1.7编程基础之字符串 24:单词的长度
  6. Zabbix配置文件详解之服务端——zabbix_server
  7. Cisco Enhanced Object Tracking
  8. VS2008安装后无法安装office2007的解决办法
  9. Tensorflow练习题
  10. 问题 L: 求100以内的素数