如何使用ArcGIS REST正确格式化geocodeAddresses文章

如何使用ArcGIS REST正确格式化geocodeAddresses文章,rest,arcgis,geocode,Rest,Arcgis,Geocode,我能够使用GET请求成功地处理批量地理编码请求(这里描述了geocodeAddresses ArcGIS REST API:世界地理编码服务| ArcGIS for Developers)。但是,我知道我会像文档描述的那样使用POST方法,因为我的批处理可能很大 当我试图通过POST提交数据时,会收到一条毫无帮助的错误消息 {'error': {'code': 400, 'details': [], 'message': 'Unable to complete operation

我能够使用GET请求成功地处理批量地理编码请求(这里描述了geocodeAddresses ArcGIS REST API:世界地理编码服务| ArcGIS for Developers)。但是,我知道我会像文档描述的那样使用POST方法,因为我的批处理可能很大

当我试图通过POST提交数据时,会收到一条毫无帮助的错误消息

{'error': {'code': 400,  
  'details': [],  
  'message': 'Unable to complete operation.'}}  
我尝试提出的请求如下所示(我尝试了各种迭代):

网址: &f=pjson

发布数据(原始)

当然,令牌被替换为我通过GET请求成功测试的有效令牌


我尝试过的变体包括将“records”作为顶级键,并将GET参数(如令牌)作为键包含在POST有效负载中。

结果表明,ESRI希望数据以x-www-form-urlencoded的形式发送,而不仅仅是一个JSON对象。因此,要正确使用端点,请将其作为formdata发送,密钥为“addresses”,值为JSON records对象。

我遇到了同样的问题,正如您已经指出的:

ESRI希望数据以x-www-form-urlencoded的形式发送,而不仅仅是一个JSON对象。因此,要正确使用端点,请将其作为formdata发送,键为“addresses”,值为JSON records对象

如果您正在寻找java实现,您可以考虑使用Form对象(javax .WS.R.Corr.Form)。 我是这样做的:

// Build addresses form object
Form addressesParam = new Form();
addressesParam.param("addresses", buildAddressesParam(addresses).toString());

// Try make request and parse it into JSON node
JsonNode jsonResponse;
try {
    String response = webTarget.request(MediaType.APPLICATION_JSON).post(Entity.entity(addressesParam, MediaType.APPLICATION_FORM_URLENCODED_TYPE), String.class);
    jsonResponse = new ObjectMapper().readTree(response);           
} catch(IOException e) {
    ...
}
其中输入地址定义为
哈希映射地址

// Build addresses form object
Form addressesParam = new Form();
addressesParam.param("addresses", buildAddressesParam(addresses).toString());

// Try make request and parse it into JSON node
JsonNode jsonResponse;
try {
    String response = webTarget.request(MediaType.APPLICATION_JSON).post(Entity.entity(addressesParam, MediaType.APPLICATION_FORM_URLENCODED_TYPE), String.class);
    jsonResponse = new ObjectMapper().readTree(response);           
} catch(IOException e) {
    ...
}