【问题标题】:How do you send a 3d array in a GET request with Apache HTTP client?如何使用 Apache HTTP 客户端在 GET 请求中发送 3d 数组?
【发布时间】:2016-03-16 08:14:29
【问题描述】:

我必须与根本不是 RESTFul 的所谓 REST API 集成。要向特定的 GET 请求添加更多数据,我必须在 URL 中发送一个 3d 数组(丑陋!!)。有人知道如何使用 Apache HTTP 客户端 v4.0.1 做到这一点吗?

这是一个 PHP 示例:

$arrArguments['saleData'] = array(); 
$arrArguments['saleData']['invoiceDate'] = 'abcdef';
$arrArguments['saleData']['deliveryDate'] = 'abcdef';
$arrArguments['saleData']['orderData'] = array(); 
$arrArguments['saleData']['orderData'][0] = array(); 
$arrArguments['saleData']['orderData'][0]['productId'] = 'abcdef';
$arrArguments['saleData']['orderData'][0]['description'] = 'abcdef';
$arrArguments['saleData']['orderData'][0]['price'] = 18819;
$arrArguments['saleData']['orderData'][0]['quantity'] = 24389;
$arrArguments['saleData']['orderData'][0]['vatCode'] = 'abcdef';;;;

【问题讨论】:

  • 您必须将此作为查询发送吗?还是作为其他参数?
  • 你知道这个数组是如何映射到 URL 查询参数的吗? ?saleData[OrderData][0][productId]=abcef?
  • 我觉得和你描述的一样。您知道如何使用 Apache HTTP 客户端发送这些查询参数吗?我应该只添加“saleData[OrderData][0][productId]”作为参数名称,然后添加一个值还是什么?
  • 是的,如果参数在 URL 中是这样的。

标签: java get apache-httpclient-4.x


【解决方案1】:

请试试这个

$arrArguments['saleData'] = array(); 
$arrArguments['saleData']['orderData'] = array(); 
$arrArguments['saleData']['orderData'][0] = array(); 

$arrArguments['saleData']['invoiceDate'] = 'abcdef';
$arrArguments['saleData']['deliveryDate'] = 'abcdef';

$arrArguments['saleData']['orderData'][0]['productId'] = 'abcdef';
$arrArguments['saleData']['orderData'][0]['description'] = 'abcdef';
$arrArguments['saleData']['orderData'][0]['price'] = 18819;
$arrArguments['saleData']['orderData'][0]['quantity'] = 24389;
$arrArguments['saleData']['orderData'][0]['vatCode'] = 'abcdef';

$restUrl ='/saleData/orderData';
new Ajax.Request("<?php echo $this->getUrl($restUrl) ?>", {
                  method: 'Post',
                  parameters: {
                     "saledata" :$arrArguments['saleData']
                               },
                  onComplete: function(response) {
                    console.log(response);  
                  }
              });

如果您使用 java/php 作为后端语言,那么您将获取请求参数以获取数据。

对于 java :-

@RequestMapping(value = "/saleData/orderData", method = RequestMethod.GET)
@ResponseBody
public Map<String, Object> beforeEdit(HttpServletRequest request,HttpSession session) {
    Map<String, Object> resultMap = new HashMap<>();
    String requestString = request.getParameter("saledata");//----may this change according to your json parsar 

}

对于 php

    $saledata = $this->getRequest()->getParam('saledata');

【讨论】:

  • 我认为客户端应该是Java的(服务器已经用PHP完成了)。
  • 这不是我的意思。我需要从 Java 调用这个 API。我添加的示例是如何在 PHP 中执行此操作的示例,但我需要知道如何使用 Apache HTTP 客户端在 Java 中执行此操作。
【解决方案2】:

正确的答案来自 Thilo。您只需添加“saleData[OrderData][0][productId]”作为参数名称,然后指定值。所以你可以有这样的东西:

final URIBuilder uriBuilder = new URIBuilder(apiUrl)
        .setPath(this.apiStartPath)
        .setParameter("saleData[OrderData][0][productId]", '12334')
        ......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 2017-04-21
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多