博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下
阅读量:7046 次
发布时间:2019-06-28

本文共 2068 字,大约阅读时间需要 6 分钟。

1、CreateRESTSchema()和Handle function

  CreateRESTSchema函数中定义了在你的SOE中可以获取的Resource和Operation,每一个Resource和Operation都与一个处理函数(handle function)相关联。该处理函数用来在Resource或Operation被触发时,描述所要进行的处理操作。这里面就是你需要编写大量AO代码的地方。

  在REST SOE模板中,有一个处理resource逻辑的RootRESTHandler函数,他返回一个简单的JSON格式的字符串

  一个resource的handler function实际上是一个在SOESupport类库中的代理(delegate),这意味着所有的resource的处理函数都有一个类似的函数签名。

 

  在REST SOE模板中包含了一个Operation的handler function。在此例中,该函数反序列化了两个字符串参数‘param1’和‘param2’,并且把它们作为JSON格式对象返回给客户端。

  同resource的处理函数一样,Operation的处理函数也是一个代理。该方法中出了一个OperationInput参数外,与resource处理函数一样。operationInput中包含了该operation中需要的参数。比如当你想要实现缓冲区查询时,该对象会包含一个point和distance参数。

  在该函数中另一个需要关心的问题是,如何反序列化输入的JSONObject和将得到的结果序列化成客户端能接受的JSON数据。反序列化和序列化JSONObject有时是个很棘手的问题。(稍后介绍)

 

  有时候我们需要向客户端返回一些非JSON数据,比如图片。我们可以通过改变HTTP协议的Content-Type属性实现

  (1)我们要在实例化RESTOperation时设置它的SupportFormat参数

  (2)在handler function中设置responseProperties参数

 

2.处理JSONObject

  大多数情况下,客户端和服务器都是通过JSON格式数据进行REST通信。所以,你的handler function必须能够反序列化JSON数据,提取其中有效值进行业务处理,在处理执行完毕后将结果序列化成JSON数据。

  反序列化JsonObject:

  问题在于AO中无法直接利用JSON数据,幸好ESRI为我们提供了SOESupport类库,该库中提供了一系列的方法来解决这个问题。当客户端发送请求时,JSON数据被作为一个SOESupport.JsonObject的实例传入到handler function中,处理完后将结果作为JsonObject返回给客户端。

 

  在上面函数中包含一个JsonObject类型的参数operationInput,它包含了我们需要的参数。上面代码中使用TryGetString方法将param1转换为string类型。在JsonObject中还包含以下方法:

  使用“TryGet”方法我们能够提取Json类型的参数值,并将其转化成你所定义的变量。可以用这些变量来定义你的AO类型数据。如果我们需要将JSON数据反序列化成geometries类型数据,SOESupport类库中为我们提供了SOESupport.Conversion.ToGeometry方法,该方法需要一个JsonObject类型或者string作为输入参数,并返回一个IGeometry类型变量。如下代码将一个JsonObject转换为IPoint:

  强调一下,上述代码中的错误检查是必须的,如果Json数据无法构成IPoint类型,会抛出一个异常。比如{x:-123, y:47}这个Json格式数据可以成功转换为IPoint,而{x:-123}则会抛出一个异常。

 

  序列化JsonObject:

   当我们的业务逻辑被执行完后,我们需要将结果序列化成JsonObject类型,并返回给客户端。这里我们依旧可以使用JsonOject类,看以下代码:

  上述代码中,如果parm1Value的值为“myFirstParameter”,该函数执行后得到的Json格式对象为“{"param1": "myFirstParameter"}”。该类中还有以下方法来构造json数据:

  有的Geometry对像由于含有子对象或数组,序列化为Json数据时比较棘手,这时我们可以使用SOESupport.Conversion.ToJsonObject方法,该函数接受一个实现了IGeometry类型的对象,并将其序列化为Json对象。如下代码:

执行后所构成如下Json数据:

以上就是本片内容,本来打算详细介绍一下Schema、Resource和Operation,后来发现内容太长,这样我们放在下一篇专门介绍

转载地址:http://hcuol.baihongyu.com/

你可能感兴趣的文章
他们黑了推特CEO的推特账号 只是为了证明自己
查看>>
解读Java环境变量配置
查看>>
在线可信联盟:IoT安全与全球变暖一样 形势严峻需要共担责任
查看>>
约8937亿元:台积电创下台湾企业市值最高纪录
查看>>
Bitbucket引入了强制双因素认证和IP白名单特性
查看>>
SDN控制器测试工具面世 RYU性能测试报告发布
查看>>
英国四高校携手开展智能传感器系统研究
查看>>
Oracle 12.2新特性掌上手册 - 第三卷 Core Improvements
查看>>
2017年人们对数据中心速度的需求有所增加
查看>>
【过程改进】总结大中小型项目的git流程
查看>>
“十三五”输电通道规模倍增 重点建设配电网
查看>>
人脸识别这杯“羹” 各路资本纷纷切入
查看>>
创新为媒,重塑CDN市场
查看>>
新区发力“互联网+”政务服务 云平台互联互通
查看>>
简述数据中心四种数据备份方式
查看>>
现代数据集成所需的业务层面
查看>>
苹果AI秀——Core ML强势来袭
查看>>
阿里云丨以AI助力电力产业变革,创造有为时代——访阿里云人工智能科学家闵万里...
查看>>
Keepalived for Linux 1.2.10 发布
查看>>
Eclipse集成Android_NDK
查看>>