HttpClient通过Post方式发送Json数据

转载:http://blog.csdn.net/majian_1987/article/details/47728769

服务器用的是Springmvc,接口内容:

[java] view plain copy

print?

  1. @ResponseBody
  2. @RequestMapping(value="/order",method=RequestMethod.POST)
  3. public boolean order(HttpServletRequest request,@RequestBody List<Order> orders) throws Exception {
  4. AdmPost admPost = SessionUtil.getCurrentAdmPost(request);
  5. if(admPost == null){
  6. throw new RuntimeException("[OrderController-saveOrUpdate()] 当前登陆的用户职务信息不能为空!");
  7. }
  8. try {
  9. this.orderService.saveOrderList(orders,admPost);
  10. Loggers.log("订单管理",admPost.getId(),"导入",new Date(),"导入订单成功,订单信息--> " + GsonUtil.toString(orders, new TypeToken<List<Order>>() {}.getType()));
  11. return true;
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. Loggers.log("订单管理",admPost.getId(),"导入",new Date(),"导入订单失败,订单信息--> " + GsonUtil.toString(orders, new TypeToken<List<Order>>() {}.getType()));
  15. return false;
  16. }
  17. }

通过ajax访问的时候,代码如下:

[javascript] view plain copy

print?

  1. $.ajax({
  2. type : "POST",
  3. contentType : "application/json; charset=utf-8",
  4. url : ctx + "order/saveOrUpdate",
  5. dataType : "json",
  6. anysc : false,
  7. data : {orders:[{orderId:"11",createTimeOrder:"2015-08-11"}]},  // Post 方式,data参数不能为空"",如果不传参数,也要写成"{}",否则contentType将不能附加在Request Headers中。
  8. success : function(data){
  9. if (data != undefined && $.parseJSON(data) == true){
  10. $.messager.show({
  11. title:‘提示信息‘,
  12. msg:‘保存成功!‘,
  13. timeout:5000,
  14. showType:‘slide‘
  15. });
  16. }else{
  17. $.messager.alert(‘提示信息‘,‘保存失败!‘,‘error‘);
  18. }
  19. },
  20. error : function(XMLHttpRequest, textStatus, errorThrown) {
  21. alert(errorThrown + ‘:‘ + textStatus); // 错误处理
  22. }
  23. });

通过HttpClient方式访问,代码如下:

[java] view plain copy

print?

  1. package com.ec.spring.test;
  2. import java.io.IOException;
  3. import java.nio.charset.Charset;
  4. import org.apache.commons.logging.Log;
  5. import org.apache.commons.logging.LogFactory;
  6. import org.apache.http.HttpResponse;
  7. import org.apache.http.HttpStatus;
  8. import org.apache.http.client.HttpClient;
  9. import org.apache.http.client.methods.HttpPost;
  10. import org.apache.http.entity.StringEntity;
  11. import org.apache.http.impl.client.DefaultHttpClient;
  12. import org.apache.http.util.EntityUtils;
  13. import com.google.gson.JsonArray;
  14. import com.google.gson.JsonObject;
  15. public class APIHttpClient {
  16. // 接口地址
  17. private static String apiURL = "http://192.168.3.67:8080/lkgst_manager/order/order";
  18. private Log logger = LogFactory.getLog(this.getClass());
  19. private static final String pattern = "yyyy-MM-dd HH:mm:ss:SSS";
  20. private HttpClient httpClient = null;
  21. private HttpPost method = null;
  22. private long startTime = 0L;
  23. private long endTime = 0L;
  24. private int status = 0;
  25. /**
  26. * 接口地址
  27. *
  28. * @param url
  29. */
  30. public APIHttpClient(String url) {
  31. if (url != null) {
  32. this.apiURL = url;
  33. }
  34. if (apiURL != null) {
  35. httpClient = new DefaultHttpClient();
  36. method = new HttpPost(apiURL);
  37. }
  38. }
  39. /**
  40. * 调用 API
  41. *
  42. * @param parameters
  43. * @return
  44. */
  45. public String post(String parameters) {
  46. String body = null;
  47. logger.info("parameters:" + parameters);
  48. if (method != null & parameters != null
  49. && !"".equals(parameters.trim())) {
  50. try {
  51. // 建立一个NameValuePair数组,用于存储欲传送的参数
  52. method.addHeader("Content-type","application/json; charset=utf-8");
  53. method.setHeader("Accept", "application/json");
  54. method.setEntity(new StringEntity(parameters, Charset.forName("UTF-8")));
  55. startTime = System.currentTimeMillis();
  56. HttpResponse response = httpClient.execute(method);
  57. endTime = System.currentTimeMillis();
  58. int statusCode = response.getStatusLine().getStatusCode();
  59. logger.info("statusCode:" + statusCode);
  60. logger.info("调用API 花费时间(单位:毫秒):" + (endTime - startTime));
  61. if (statusCode != HttpStatus.SC_OK) {
  62. logger.error("Method failed:" + response.getStatusLine());
  63. status = 1;
  64. }
  65. // Read the response body
  66. body = EntityUtils.toString(response.getEntity());
  67. } catch (IOException e) {
  68. // 网络错误
  69. status = 3;
  70. } finally {
  71. logger.info("调用接口状态:" + status);
  72. }
  73. }
  74. return body;
  75. }
  76. public static void main(String[] args) {
  77. APIHttpClient ac = new APIHttpClient(apiURL);
  78. JsonArray arry = new JsonArray();
  79. JsonObject j = new JsonObject();
  80. j.addProperty("orderId", "中文");
  81. j.addProperty("createTimeOrder", "2015-08-11");
  82. arry.add(j);
  83. System.out.println(ac.post(arry.toString()));
  84. }
  85. /**
  86. * 0.成功 1.执行方法失败 2.协议错误 3.网络错误
  87. *
  88. * @return the status
  89. */
  90. public int getStatus() {
  91. return status;
  92. }
  93. /**
  94. * @param status
  95. *            the status to set
  96. */
  97. public void setStatus(int status) {
  98. this.status = status;
  99. }
  100. /**
  101. * @return the startTime
  102. */
  103. public long getStartTime() {
  104. return startTime;
  105. }
  106. /**
  107. * @return the endTime
  108. */
  109. public long getEndTime() {
  110. return endTime;
  111. }
  112. }
时间: 2024-10-15 12:17:08

HttpClient通过Post方式发送Json数据的相关文章

Http post方式发送json数据

HttpClient模拟get,post请求并发送请求参数(json等) import java.io.IOException; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.Header; import org.

HttpClient发送Json数据到指定接口

项目中遇到将Json数据发送到指定接口,于是结合网上利用HttpClient进行发送. /** * post发送json数据 * @param url * @param param * @return */ private String doPost(String url, JSONObject param) { HttpPost httpPost = null; String result = null; try { HttpClient client = new DefaultHttpCli

基于Web Service的客户端框架搭建一:C#使用Http Post方式传递Json数据字符串调用Web Service

引言 前段时间一直在做一个ERP系统,随着系统功能的完善,客户端(CS模式)变得越来越臃肿.现在想将业务逻辑层以下部分和界面层分离,使用Web Service来做.由于C#中通过直接添加引用的方来调用Web Service的方式不够灵活,故采取手动发送Http请求的方式来调用Web Service.最后选择使用Post方式来调用Web Service,至于安全性和效率暂不考虑.在学习使用的过程,遇到了很多问题,也花了很长时间来解决,网上相关的帖子很少,如果各位在使用的过程中有一些问题难以解决,可

前端ajax用post方式提交json数据给后端时,网络报错 415

项目框架:spring+springmvc+mybatis 问题描述:前端ajax用post方式提交json数据给后端时,网络报错 415 前端异常信息:Failed to load resource: the server responded with a status of 415 (Unsupported Media Type) 后端异常信息:无 报错原因:缺少jackson包 类似问题注意点: springmvc添加配置.注解: pom.xml添加jackson包引用: Ajax请求时没

ajax 发送json数据时为什么需要设置contentType: &quot;application/json”

1. ajax发送json数据时设置contentType: "application/json"和不设置时到底有什么区别? contentType: "application/json",首先明确一点,这也是一种文本类型(和text/json一样),表示json格式的字符串,如果ajax中设置为该类型,则发送的json对象必须要使用JSON.stringify进行序列化成字符串才能和设定的这个类型匹配.同时,对应的后端如果使用了Spring,接收时需要使用@Req

ajax发送json数据时为什么需要设置contentType: &quot;application/json”

1. ajax发送json数据时设置contentType: "application/json”和不设置时到底有什么区别?contentType: "application/json”,首先明确一点,这也是一种文本类型(和text/json一样),表示json格式的字符串,如果ajax中设置为该类型,则发送的json对象必须要使用JSON.stringify进行序列化成字符串才能和设定的这个类型匹配.同时,对应的后端如果使用了Spring,接收时需要使用@RequestBody来注解

iOS开发网络篇—发送json数据给服务器以及多值参数

iOS开发网络篇—发送json数据给服务器以及多值参数 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 代码示例: 1 #import "YYViewController.h" 2 3 @interface YYViewController () 4 5 @end 6 7 @implementation YYViewController 8 9 - (void)viewDidLoad 10

SpringMVC客户端发送json数据时报400错误

当测试客户端发送json数据给服务器时,找不到响应路径? 原来是参数类型不符,即使是json也要考虑参数的个数和类型 解决:将age请求参数由"udf"改为"3"或任意数字即可

[小项目] 获取手机联系人并且向服务器发送JSON数据

[小项目] 获取手机联系人并且向服务器发送JSON数据 好久没有写文档了...最近忙着带班,也没有时间学习新东西,今天刚好有个小Demo,就写了一下,顺便丰富一下我的博客吧! 首先说一下需求: 简单的说,就是一个程序,会获取手机的联系人列表,然后转换成JSON字符串数组,向指定服务器中发送数据...总感觉有侵犯别人隐私权的意味; 注:仅供学习使用,不要做违法的事情哟 这个程序我写的有点有条理,首先有几个工具类: 1. 判断是否联网的工具类(NetUtils) 2. 从手机中获取所有联系人的工具类