Apache HttpClient GET和POST示例

我们已经学习了有关构建RESTful Web服务的知识。现在学习构建一个使用HttpClient RESTful Client来使用Web服务的JAX-RS REST客户

我将重用为jaxrs xml example编写的代码。

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

HTTP获取和发布API
@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构建RESTful客户端,请遵循以下说明。

1. Apache HttpClient Maven依赖项

pom.xml
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.1.1</version>
</dependency>

2. Apache HttpClient GET API示例

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

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数据发送到服务器。

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();
    }
}

将您对http帖子请求的httpclient示例的评论放给我,然后获取请求。

学习愉快!

saigon has written 1440 articles

Leave a Reply