博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Java HttpComponent/HttpClinet 调用 WebAPI问题的解决
阅读量:4363 次
发布时间:2019-06-07

本文共 2489 字,大约阅读时间需要 8 分钟。

几个关键字:

WebAPI, Android, Apache HttpComponent/HttpClient

问题:无论怎么测试, WebAPI的FormBody value总是空.

 

最简单的代码 WebAPI, 没有加认证

1 // POST api/
2 [HttpPost] 3 public string Post([FromBody]string value) 4 { 5 string val = value; 6 7 Debug.WriteLine(value); 8 9 return value;10 }

 

最简单的代码, Java端,用StringEntity

1     public static void NotAuthTestPost() throws IOException { 2         CloseableHttpClient httpclient = HttpClients.createDefault(); 3         try { 4             HttpPost hp = new HttpPost("http://localhost:8888/api/test"); 5              6             String str="{'Header':[{'summary':111,'endtime':570,'end_date':1431381600,'resid':'sc20150512034635','starttime':570,'scheduleid':'sc155485e5025f3d','machid':'sc155485e8044b93','parentid':null,'start_date':1431381600}],'Detail':[{'perm_modify':1,'owner':1,'perm_delete':1,'resid':'sc20150512034635','memberid':'sc1555070e4d8217','invited':0},{'perm_modify':0,'owner':0,'perm_delete':0,'resid':'sc20150512034635','memberid':'sc155489a07e0e24','invited':1}]}"; 7  8             StringEntity se = new StringEntity(str, ContentType.create("application/json", "UTF-8")); 9             hp.setEntity(se);10 11             System.out.println(EntityUtils.toString(se));12 13             CloseableHttpResponse response1 = null;14             try {15                 response1 = httpclient.execute(hp);16 17                 System.out.println(response1.getStatusLine());18                 HttpEntity entity1 = response1.getEntity();19 20                 // do something useful with the response body21                 // and ensure it is fully consumed22                 // EntityUtils.consume(entity1);23 24                 String jsonstr = EntityUtils.toString(entity1);25 26                 System.out.println(jsonstr);27 28             } catch (ClientProtocolException e) {29                 e.printStackTrace();30             } catch (IOException e) {31                 e.printStackTrace();32             } finally {33                 response1.close();34             }35 36         } finally {37             httpclient.close();38         }39     }

 

结果:

 

但是同样的Json, 使用C#的HTTPClient就完全没有问题.

计较了一下fiddle抓图:

使用C# HttpClient: (value是能取到)

 

使用Java Apache HttpClient (Value取不到)

 

比较一下就发现, 在Raw视图, 才可以看出, HttpRequest的Body是有不同的. 就是一对引号. "".

 

所以把Java的代码中加一行:

str ="\"" +str + "\"";

 

WebAPI端就正常拿到Value了.

 

估计有更深层次的解决方案, 暂且先记一笔.

 

>>2015/06/15

把WebAPI的参数value的类型改为object就可以了. 这么狗血的解决方案.

 

转载于:https://www.cnblogs.com/tekikesyo/p/4500271.html

你可能感兴趣的文章
python接口自动化3-自动发帖(session)
查看>>
复杂问题的简单抽象:魔兽世界中的兔子们
查看>>
那些美到极致的语言!
查看>>
Xamarin的不归路-ios模拟器没有键盘
查看>>
【云笔记】群晖DS218+ NoteStation 折腾
查看>>
jdk安装配置
查看>>
四、RocketMq简单的消费者和生产者(示例代码)
查看>>
json介绍
查看>>
Maven编译unmappable character for encoding Cp1252问题
查看>>
xftp上传文件失败,执行程序发现磁盘满了:No space left on device
查看>>
duplicate symbols for architecture i386 问题?
查看>>
[BZOJ]1027 合金(JSOI2007)
查看>>
poj 1696 Space Ant (几何 : 叉积 应用 + dfs)
查看>>
MySQL:按前缀批量删除表格
查看>>
Route学习笔记之Area的Route注册
查看>>
构建之法--软件工程师自我测评表
查看>>
电子书搜索
查看>>
SQO2008配置管理工具服务显示远程过程调用失败
查看>>
【HDOJ】1009 FatMouse' Trade
查看>>
谷歌跨域
查看>>