# Apache HttpClient GET 和 POST 示例

> 原文： [https://howtodoinjava.com/resteasy/jax-rs-restful-client-using-apache-httpclient/](https://howtodoinjava.com/resteasy/jax-rs-restful-client-using-apache-httpclient/)

我们已经学习了有关构建 [RESTful Web 服务](//howtodoinjava.com/restful-web-service/ "restful-web-service")的知识。 现在学习构建 *JAX-RS REST 客户端*以便使用 HttpClient RESTful 客户端来使用 Web 服务。

我将重用为 [jaxrs xml 示例](//howtodoinjava.com/resteasy/resteasy-jaxb-xml-example/ "RESTEasy + JAXB xml example")编写的代码。

我将访问的 HTTP GET 和 POST REST API 已定义。

```java
@GET
@Path("/users/{id}")
public User getUserById (@PathParam("id") Integer id) 
{
	User user = new User();
	user.setId(id);
	user.setFirstName("demo");
	user.setLastName("user");
	return user;
}

@POST
@Path("/users")
public User addUser() 
{
   //Some code
}

```

要使用 [**Apache httpclient**](https://hc.apache.org/httpclient-3.x/ "apache http client") 构建 RESTful 客户端，请遵循以下说明。

## 1\. Apache HttpClient Maven 依赖项

```java
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.1.1</version>
</dependency>

```

## 2\. Apache HttpClient GET API 示例

Java 程序，用于如何使用 http get 请求发送 json 数据。

```java
public static void demoGetRESTAPI() throws Exception 
{
	DefaultHttpClient httpClient = new DefaultHttpClient();
	try
	{
		//Define a HttpGet request; You can choose between HttpPost, HttpDelete or HttpPut also.
		//Choice depends on type of method you will be invoking.
		HttpGet getRequest = new HttpGet("http://localhost:8080/RESTfulDemoApplication/user-management/users/10");

		//Set the API media type in http accept header
		getRequest.addHeader("accept", "application/xml");

		//Send the request; It will immediately return the response in HttpResponse object
		HttpResponse response = httpClient.execute(getRequest);

		//verify the valid error code first
		int statusCode = response.getStatusLine().getStatusCode();
		if (statusCode != 200) 
		{
			throw new RuntimeException("Failed with HTTP error code : " + statusCode);
		}

		//Now pull back the response object
		HttpEntity httpEntity = response.getEntity();
		String apiOutput = EntityUtils.toString(httpEntity);

		//Lets see what we got from API
		System.out.println(apiOutput); //<user id="10"><firstName>demo</firstName><lastName>user</lastName></user>

		//In realtime programming, you will need to convert this http response to some java object to re-use it.
		//Lets see how to jaxb unmarshal the api response content
		JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
		Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
		User user = (User) jaxbUnmarshaller.unmarshal(new StringReader(apiOutput));

		//Verify the populated object
		System.out.println(user.getId());
		System.out.println(user.getFirstName());
		System.out.println(user.getLastName());
	}
	finally
	{
		//Important: Close the connect
		httpClient.getConnectionManager().shutdown();
	}
}

```

## 3\. 带有 json 正文的 Apache HttpClient POST API 示例

Java 程序，用于如何使用 http post 请求将 json 数据发送到服务器。

```java
public static void demoPostRESTAPI() throws Exception 
{
	DefaultHttpClient httpClient = new DefaultHttpClient();

	User user = new User();
	user.setId(100);
	user.setFirstName("Lokesh");
	user.setLastName("Gupta");

	StringWriter writer = new StringWriter();
	JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
	Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
	jaxbMarshaller.marshal(user, writer);

	try
	{
		//Define a postRequest request
		HttpPost postRequest = new HttpPost("http://localhost:8080/RESTfulDemoApplication/user-management/users");

		//Set the API media type in http content-type header
		postRequest.addHeader("content-type", "application/xml");

		//Set the request post body
		StringEntity userEntity = new StringEntity(writer.getBuffer().toString());
		postRequest.setEntity(userEntity);

		//Send the request; It will immediately return the response in HttpResponse object if any
		HttpResponse response = httpClient.execute(postRequest);

		//verify the valid error code first
		int statusCode = response.getStatusLine().getStatusCode();
		if (statusCode != 201) 
		{
			throw new RuntimeException("Failed with HTTP error code : " + statusCode);
		}
	}
	finally
	{
		//Important: Close the connect
		httpClient.getConnectionManager().shutdown();
	}
}

```

[源码下载](https://docs.google.com/file/d/0B7yo2HclmjI4SF9nbVlmYUVERUk/edit?usp=sharing)

将您对 http GET
 和 POST 请求的 httpclient 示例的评论发给我。

学习愉快！