HTTP get方式传json |
您所在的位置:网站首页 › GET方法可以提交对象吗 › HTTP get方式传json |
文章目录
一、背景?二、尝试的过程1.postman(成功)2.hutool(失败)3.AsyncHttpClient(成功)
总结
一、背景?
最近项目中有个三方接口,需要使用get请求传递json, 这个让人有点懵,一般来说get参数都会直接拼接在url后, 复杂的参数都使用post方式传递, 尝试过程中发现postman可以正常请求,使用hutool工具请求却失败了,网上找了一圈,才摸索出了解决方案 二、尝试的过程 1.postman(成功)截图如下(示例): 代码如下(示例): 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 |