Apache HttpClient调用Spring3 MVC Restful Web API演示

简介: Apache HttpClient调用Spring3 MVC Restful Web API演示

Apache HttpClient调用Spring3 MVC Restful Web API演示

使用HttpRequest提交数据与HttpResponse响应客户端都是支持json数据格式,实现在HTTP Client端调用Spring3 MVC Restful API例子。需要用到的maven依赖如下:

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.5.1</version>
</dependency>
<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.5</version>
</dependency>

添加了maven依赖之后,就可以先完成HttpClient演示程序,这里分别实现了从服务器上拉取一个list对象、提交一个对象json数据到服务器上请求创建两个操作,分别对应Http的GET与POST请求。完整的实现代码如下:

package com.httpclient.demo;
 
import java.io.IOException;
import java.util.List;
 
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
 
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
 
public class HttpClientDemo {
 
  public static void main(String[] args) {
    HttpClient httpClient = HttpClientBuilder.create().build(); // Use this
                                  // instead
    HttpGet request = new HttpGet("http://localhost:8080/clotherdye/api/myTest/list");
    request.addHeader("content-type", "application/json");
    request.addHeader("Accept", "application/json");
    try {
      // get with json
      HttpResponse httpResponse = httpClient.execute(request);
      String response = EntityUtils.toString(httpResponse.getEntity());
      Gson gson = new Gson();
      List<PersonDto> embossList = gson.fromJson(response, new TypeToken<List<PersonDto>>(){}.getType());
      if(embossList != null && embossList.size() > 0)
      {       
        System.out.println("Name = " + embossList.get(0).getName());
        System.out.println("Country = " + embossList.get(0).getCountry());
        System.out.println("dddddddddd");
      }
      
      // post data with json
      HttpPost httpPost = new HttpPost("http://localhost:8080/clotherdye/api/myTest/create");
      httpPost.addHeader("content-type", "application/json");
      httpPost.addHeader("Accept", "application/json");
      PersonDto dto = new PersonDto();
      dto.setName("http-client");
      dto.setHobby("json parser");
      dto.setCountry("US");
      dto.setDegree("本科");
      dto.setOccupy("tester");
      String jsonString = gson.toJson(dto);
      StringEntity entity = new StringEntity(jsonString);
      httpPost.setEntity(entity);
      httpResponse = httpClient.execute(httpPost);
      response = EntityUtils.toString(httpResponse.getEntity());
      System.out.println(response);
      
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      
    }
  }
}

Person对象类的代码如下:

public class PersonDto {
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getCountry() {
    return country;
  }
  public void setCountry(String country) {
    this.country = country;
  }
  public String getDegree() {
    return degree;
  }
  public void setDegree(String degree) {
    this.degree = degree;
  }
  public String getOccupy() {
    return occupy;
  }
  public void setOccupy(String occupy) {
    this.occupy = occupy;
  }
  public String getHobby() {
    return hobby;
  }
  public void setHobby(String hobby) {
    this.hobby = hobby;
  }
  private String name;
  private String country;
  private String degree;
  private String occupy;
  private String hobby;
}

服务器端是基于Spring3 MVC开发的Controller接口类,代码如下

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
 
@Controller
@RequestMapping("/api/myTest")
public class RestfulAPIController {
  
  
  @RequestMapping("/list")
  public @ResponseBody List<PersonDto> getList() {
    List<PersonDto> persons = new ArrayList<PersonDto>();
    PersonDto p1 = new PersonDto();
    p1.setCountry("中国");
    p1.setDegree("本科");
    p1.setHobby("编程");
    p1.setName("zhigang");
    p1.setOccupy("程序员");
    
    PersonDto p2 = new PersonDto();
    p2.setCountry("中国");
    p2.setDegree("本科");
    p2.setHobby("图像处理");
    p2.setName("jia20003");
    p2.setOccupy("码农");
    
    persons.add(p1);
    persons.add(p2);
    System.out.println("start to get PersonDto list");
    return persons;
  }
  
  @RequestMapping(value = "/create", method = RequestMethod.POST)
  @ResponseBody
  public Map<String, Object> createMember(@RequestBody PersonDto dto)
  {
    System.out.println(dto.getName());
    System.out.println(dto.getOccupy());
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("success", dto.getName() + "创建成功!");
    return map;
  }
}

需要特别说明的是Restful Web API应该严格遵守Http的四个操作:

GET对应查询操作

POST对应创建操作

PUT对应更新操作

DELETE对应删除操作

不应该再有其它任何操作,也就是说从HttpClient发过来的Request类型只能

是上述四种之一。否则不能称为Restful API。


JSON对象解析在HttpClient端我用了google json解析包,比较好用

推荐大家用。

相关文章
|
19天前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
110 29
|
3月前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
2月前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
69 4
|
2月前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
71 12
|
3月前
|
XML JSON 缓存
深入理解RESTful API设计原则与实践
在现代软件开发中,构建高效、可扩展的应用程序接口(API)是至关重要的。本文旨在探讨RESTful API的核心设计理念,包括其基于HTTP协议的特性,以及如何在实际应用中遵循这些原则来优化API设计。我们将通过具体示例和最佳实践,展示如何创建易于理解、维护且性能优良的RESTful服务,从而提升前后端分离架构下的开发效率和用户体验。
|
3月前
|
监控 安全 API
深入浅出:构建高效RESTful API的最佳实践
在数字化时代,API已成为连接不同软件和服务的桥梁。本文将带你深入了解如何设计和维护一个高效、可扩展且安全的RESTful API。我们将从基础概念出发,逐步深入到高级技巧,让你能够掌握创建优质API的关键要素。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的指导和启示。让我们一起探索API设计的奥秘,打造出色的后端服务吧!
|
3月前
|
JSON 缓存 测试技术
构建高效RESTful API的后端实践指南####
本文将深入探讨如何设计并实现一个高效、可扩展且易于维护的RESTful API。不同于传统的摘要概述,本节将直接以行动指南的形式,列出构建RESTful API时必须遵循的核心原则与最佳实践,旨在为开发者提供一套直接可行的实施框架,快速提升API设计与开发能力。 ####
|
3月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
234 2
|
3月前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
3月前
|
JSON API 数据格式
探索后端开发:从零构建简易RESTful API
在数字时代的浪潮中,后端开发如同搭建一座桥梁,连接着用户界面与数据世界。本文将引导读者步入后端开发的殿堂,通过构建一个简易的RESTful API,揭示其背后的逻辑与魅力。我们将从基础概念出发,逐步深入到实际操作,不仅分享代码示例,更探讨如何思考和解决问题,让每一位读者都能在后端开发的道路上迈出坚实的一步。

推荐镜像

更多