Android/Java 中利用HttpClient 发送Patch请求,携带Json参数

由于项目的需要,在前面记录过利用HttpUrlConnection发送Put请求的方法,链接在这http://blog.csdn.net/crystaldestiny/article/details/46469465,现在,项目中又有需要以Patch方式发送Http请求,真心感觉这两种凡是用得不是很多,网上的资料也很有限,参考过网上一些帖子的后,算是实现了!在此记录一下,本人也是菜鸟,欢迎交流学习!

通过查看HttpUrlConnection的相关资发现,该类应该不支持Patch方式的Http请求,但是通过功能更加强大的Apache  HttpClient却可以轻松实现PUT和PATCH请求,先来看一看,利用HttpClient实现Put请求的代码:

  

	public static JSONObject executeHttpPut(String url,JSONObject jsonParam){
		JSONObject resultObj = null;
		HttpClient httpClient = new DefaultHttpClient(); 
		HttpPut httpPut = new HttpPut(url);
		httpPut.setHeader("Content-type", "application/json");
		httpPut.setHeader("Charset", HTTP.UTF_8);
		httpPut.setHeader("Accept", "application/json");
		httpPut.setHeader("Accept-Charset", HTTP.UTF_8);
		try {
			if (jsonParam != null) {
				StringEntity entity = new StringEntity(jsonParam.toString(),HTTP.UTF_8);
				httpPut.setEntity(entity);
			}
			HttpResponse response = httpClient.execute(httpPut);
			resultObj = new JSONObject(EntityUtils.toString(response.getEntity()));
		} catch (IOException | ParseException | JSONException e) {
			e.printStackTrace();
		}
		return resultObj;
	}

上面的代码应该很简单,基本上跟利用HttpClient发送Post请求一样,只需要将

HttpPost httpPost = new HttpPost(url); 
改成
HttpPut httpPut = new HttpPut(url);
就OK了。
对于Patch请求,查看HttpClient的API可以看到,在其给出的API中,并没有所期待的HttpPatch类,也有人说在最新的版本里面好像是有HttpPatch这个类的,应为手上是个Android项目,可能android版本中集成 的HttpClient版本比较低,确实找不到HttpPatch这个类(在java项目中,可以去下载最新的Apache HttpClient 包),但是参考http://www.bubuko.com/infodetail-72930.html这个帖子的做法,完全可以满足需求,即重写一下 HttpPut 或 HttpPost 的 getMethod 方法
代码如下:
public class HttpPatch extends HttpPut {
    public HttpPatch(String url) {
        super(url);
    }
    @Override
    public String getMethod() {
        return "PATCH";
    }
}
这里要说的是,确实如参考的文章所说,重写HttpPut或者HttpPost的getMethod方法都是一样的,都可以实现。

 
  
然后利用上面的HttpPatch类,发送带有
 
  
public static JSONObject executeHttpPatch(String url,JSONObject jsonParam){
		JSONObject resultObj = null;
		HttpClient httpClient = new DefaultHttpClient(); 
		HttpPatch httpPatch = new HttpPatch(url);
		httpPatch.setHeader("Content-type", "application/json");
		httpPatch.setHeader("Charset", HTTP.UTF_8);
		httpPatch.setHeader("Accept", "application/json");
		httpPatch.setHeader("Accept-Charset", HTTP.UTF_8);
		try {
			if (jsonParam != null){
				StringEntity entity = new StringEntity(jsonParam.toString(),HTTP.UTF_8);
				httpPatch.setEntity(entity);
			}
			HttpResponse response = httpClient.execute(httpPatch);
			resultObj = new JSONObject(EntityUtils.toString(response.getEntity()));
		} catch (ParseException | JSONException | IOException   e) {
			e.printStackTrace();
		}
		
		return resultObj;
	}


说明:由于项目需要,传入的参数和返回值都是JSONObject对象。
从代码可以看到,其实重写一下 HttpPut 或 HttpPost 的 getMethod 方法之后,发送Patch请求跟发送Put和Post请求基本上没有什么区别!
欢迎交流学习!




 
  
 
  

你可能感兴趣的:(Android)