当前位置: 首页 > 知识库问答 >
问题:

使用rest模板调用带有查询参数的get方法API时,获取400 null作为错误消息

商麒
2023-03-14

我试图通过使用rest模板传递查询参数来调用一个get方法API。我只以正确的格式传递请求,但我得到的错误消息是“400 null”。

以下是curl命令,它与Postman一起正常工作:

curl -X GET \
  'http://localhost:8086/uaa/Groups?filter=identity_zone_id%20eq%20%22uaa%22' \
  -H 'authorization: Bearer eyJhbGciOiJIUzI1NiIsImtpZCI6ImxlZ2FjeS10b2tlbi1rZXkiLCJ0eXAiOiJKV1QifQ.eyJqdGkiOiJlMmEwYzgwN2M4ZDQ0YzhiYTE1ZmUwNGJmZjFmNzNlYyIsInN1YiI6IjBkZTZlZDhkLWU1OGMtNGExNC1iNTdmLWM5Mjk2Y2JlYjM3NSIsInNjb3BlIjpbImFwaXMucmVhZCIsIm9wZW5pZCIsImFwaXMud3JpdGUiLCJ1YWEuYWRtaW4iLCJzY2ltLndyaXRlIiwic2NpbS5yZWFkIiwidWFhLnVzZXIiXSwiY2xpZW50X2lkIjoiY2xpZW50IiwiY2lkIjoiY2xpZW50IiwiYXpwIjoiY2xpZW50IiwiZ3JhbnRfdHlwZSI6ImF1dGhvcml6YXRpb25fY29kZSIsInVzZXJfaWQiOiIwZGU2ZWQ4ZC1lNThjLTRhMTQtYjU3Zi1jOTI5NmNiZWIzNzUiLCJvcmlnaW4iOiJ1YWEiLCJ1c2VyX25hbWUiOiJtYXJpc3NhIiwiZW1haWwiOiJtYXJpc3NhQHRlc3Qub3JnIiwiYXV0aF90aW1lIjoxNTEyNDU1NzU4LCJyZXZfc2lnIjoiMWE5MzYzNWYiLCJpYXQiOjE1MTI0NTU3NTksImV4cCI6MTUxMjQ5ODk1OSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsInppZCI6InVhYSIsImF1ZCI6WyJzY2ltIiwiYXBpcyIsInVhYSIsIm9wZW5pZCIsImNsaWVudCJdfQ.LbVu7inr5htyOHPyoN_KzIyFRZZiiiCV4xZHTCJZR30'
    String transactionUrl = "http://localhost:8086/uaa/Groups";
    headers.set("Authorization", "Bearer "+accessToken);
       HttpEntity<String> entity = new HttpEntity<String>(headers);

    UriComponentsBuilder builder = UriComponentsBuilder
        .fromUriString(transactionUrl)
        // Add query parameter
        .queryParam("filter", "identity_zone_id+eq+%22uaa%22");


    RestTemplate restTemplate = new RestTemplate();
    //String response = restTemplate.getForObject(builder.toUriString(), String.class);
    System.out.println("URL===="+builder.toUriString());
    try {
        String param= URLDecoder.decode("filter=identity_zone_id%2Beq%2B%2522uaa%2522", "UTF-8");
        System.out.println("param=="+param+"\n");

        String decodedURL = URLDecoder.decode(builder.toUriString(), "UTF-8");
        System.out.println("decodedURL=="+decodedURL+"\n");
        System.out.println("----------------------------------------------------");

        System.out.println(URLDecoder.decode(builder.toUriString(), "UTF-8"));
        System.out.println("entity=="+entity);

    //String decodedURL = java.net.URLDecoder.decode(builder.toUriString(), "UTF-8");

    ResponseEntity<String> response = 
            restTemplate.exchange(decodedURL, 
                                  HttpMethod.GET, entity, String.class, param);
    return "Success-"+response;
    } catch (UnsupportedEncodingException ex) {
        ex.printStackTrace();
    }

    return "error";
}

共有1个答案

苏昊英
2023-03-14

不要在url中提到端口,而是使用URIComponentsBuilder传递它

String transactionUrl = "http://localhost/uaa/Groups";
UriComponentsBuilder builder = UriComponentsBuilder
        .fromUriString(transactionUrl)
        .port(8086)
        // Add query parameter
        .queryParam("filter", "identity_zone_id+eq+%22uaa%22");
 类似资料:
  • 我有一个jQuery ajax调用,在IE中运行良好,但在Chrome和Firefox中不断出错。我的应用程序中的其他地方也有类似的ajax调用,它们在所有浏览器中都运行良好,但由于某种原因,这个浏览器不行。 首先,我在这里做的事情会在IE之外的浏览器中中断吗?其次,同样重要的是,有没有办法从< code>error: function (e) {}块中得到一些有意义的东西?

  • 我试着检查基本的放心获取方法和获取以下错误。使用以下版本:rest-assured-4.1.1-dist.zip 代码: 输出: 测试

  • 问题内容: 我知道在php中,我只能用来检索以数组形式发送的GET数据,但是在Python中,可能是因为我只收到一个字符串,却无法识别为数组/列表。 如果需要的话,我会用flask/werkzeug。 问题答案: 参数名称的深度解析对于PHP AFAIK是唯一的。 如果你只需要一个简单的列表,只需传递几个具有相同名称的参数并使用(documentation)。 否则,你必须自己解析查询字符串。

  • 问题内容: 在Go模板中,有时将正确的数据传递到正确的模板的方式令我感到尴尬。用流水线参数调用模板看起来就像只用一个参数调用函数。 假设我有一个Gophers网站,有关Gophers。它具有一个主页主模板和一个用于打印Gophers列表的实用程序模板。 http://play.golang.org/p/Jivy_WPh16 输出: 现在,我想在子模板中添加一些上下文:在列表内以不同的方式设置名称“

  • 我想使用一个RESTendpoint,将查询参数(qp1、qp2、qp3的组合)传递给它,例如: 为此,我定义了RESTendpoint,如下所示: 看起来查询生成是:...其中qp1=null,qp2=123,qp3=null 我想要实现的是,只调用URL中存在的那些查询参数,只调用那些应该构建查询的参数。 如果调用只使用qp1 http://localhost:8080/..../my-res

  • 问题内容: 我已经看过以下SO问题,即使用AngularJS的$http服务通过GET请求发送数组,以及通过Angular $ http POST传递数据数组。但是那里建议的解决方案似乎对我不起作用。我的专门针对 数组对象 。 我有以下带有数组参数的AngularJS ajax调用 该调用生成的网址似乎不适用于我。我已经尝试了各种参数的化身,并且生成的网址(通过提琴手将其获取)如下。 我希望网址为