HTTP get方式传json

您所在的位置:网站首页 GET方法可以提交对象吗 HTTP get方式传json

HTTP get方式传json

2024-07-13 15:15| 来源: 网络整理| 查看: 265

文章目录 一、背景?二、尝试的过程1.postman(成功)2.hutool(失败)3.AsyncHttpClient(成功) 总结

一、背景?

最近项目中有个三方接口,需要使用get请求传递json, 这个让人有点懵,一般来说get参数都会直接拼接在url后, 复杂的参数都使用post方式传递, 尝试过程中发现postman可以正常请求,使用hutool工具请求却失败了,网上找了一圈,才摸索出了解决方案

二、尝试的过程 1.postman(成功)

截图如下(示例):

在这里插入图片描述

2.hutool(失败)

代码如下(示例):

HttpRequest get = HttpUtil.createGet(url + "api/token"); Map params = new HashMap(); params.put("AppId", appId); params.put("AppKey", appKey); get.body(JSONObject.toJSONString(params), "application/json"); get.execute();

上述代码会返回415(为什么明明是get,却提示415呢?),这里有意思的地方在于, 如果我去掉get.body() 这行代码, 他会正常返回没有参数的异常, 所以我推测是hutool在发现请求携带body时, 将get换成post方式了, 而且在fiddler中发现确实如此。

3.AsyncHttpClient(成功)

此处参考博客地址 废话不多说,代码如下

DefaultAsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient(); Map params = new HashMap(); params.put("AppId", appId); params.put("AppKey", appKey); Request r = new RequestBuilder() .setUrl(url + "api/token") .setBody(JSONObject.toJSONString(params)) .addHeader("Content-Type", "application/json") .build(); ListenableFuture future = asyncHttpClient.executeRequest(r); Response response = future.get(); asyncHttpClient.close(); //工具版本 org.asynchttpclient async-http-client 2.12.3 总结 首先说明,get方式可以携带body, 传json是没问题的 但是不推荐在定义接口时要求用get接收json,就像大家在吃饭喜欢用筷子而不是勺子,虽然都可以达到目的,不过显而易见"筷子"更受欢迎


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3