Apache HttpClient调用Spring3 MVC Restful Web API演示

简介: Apache HttpClient调用Spring3 MVC Restful Web API演示使用HttpRequest提交数据与HttpResponse响应客户端都是支持json数据格式,实现在HTTP Client端调用Spring3 MVC Restful 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解析包,比较好用

推荐大家用。

目录
相关文章
|
13天前
|
开发框架 监控 .NET
Visual Basic的Web服务和REST API开发指南
【4月更文挑战第27天】本文探讨了使用Visual Basic(VB.NET)构建Web服务和RESTful API的方法。首先介绍了Web服务的基础和REST API的概念,然后阐述了.NET Framework与.NET Core/.NET 5+对VB.NET的支持,以及ASP.NET Core在Web开发中的作用。接着,详细讲解了创建RESTful API的步骤,包括控制器与路由设置、模型绑定与验证,以及返回响应。此外,还讨论了安全措施、测试方法、部署选项和监控策略。最后强调,VB.NET开发者可以通过ASP.NET Core涉足现代Web服务开发,拓宽技术领域。
|
14天前
|
缓存 监控 API
构建高效可扩展的RESTful API:后端开发的实践指南
【4月更文挑战第26天】在现代Web开发中,构建一个高效、可扩展且易于维护的RESTful API是后端工程师必须面对的挑战。本文将深入探讨如何利用最佳实践和流行技术,设计出符合REST架构原则的服务端接口。我们将重点讨论API版本控制、资源路由、数据库优化、缓存策略以及安全性考虑等方面,旨在为开发者提供一套综合性解决方案,帮助其提升API的性能与可靠性。
|
10天前
|
弹性计算 JSON Shell
基于Web API的自动化信息收集和整理
【4月更文挑战第30天】
19 0
|
10天前
|
JSON API 数据处理
【Swift开发专栏】Swift中的RESTful API集成实战
【4月更文挑战第30天】本文探讨了在Swift中集成RESTful API的方法,涉及RESTful API的基础概念,如HTTP方法和设计原则,以及Swift的网络请求技术,如`URLSession`、`Alamofire`和`SwiftyJSON`。此外,还强调了数据处理、错误管理和异步操作的重要性。通过合理利用这些工具和策略,开发者能实现高效、稳定的API集成,提升应用性能和用户体验。
|
3天前
|
存储 缓存 JavaScript
深入理解RESTful API设计原则与实践
【5月更文挑战第7天】在现代Web服务开发中,表述性状态传递(REST)是一种广泛采用的架构风格,用于构建可扩展的网络应用程序接口(APIs)。本文将探讨RESTful API的核心设计原则,并通过具体实例展示如何实现一个符合REST约束的后端服务。我们将讨论资源的识别、客户端-服务器通信模式、无状态性、以及统一接口的重要性,并探索如何使用当前的流行技术栈来实现这些概念。
|
7天前
|
XML JSON Java
【Web系列笔记】Restful
本文讨论了RESTful接口设计的原因和原则。传统方式中,http接口常按功能聚合,导致行为不规范,如订单操作有多种请求方式。RESTful设计强调资源的结构清晰、标准统一,通过资源URI、表现层和状态转化来组织接口。它推荐使用GET、POST、PUT和DELETE等HTTP方法对应资源的创建、读取、更新和删除操作。在实践中,应避免URI中包含动词,确保每个URI代表一种资源,并利用HTTP动词表达操作。这样能提高接口的易理解和扩展性。
33 8
|
8天前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
19 4
|
10天前
|
缓存 监控 JavaScript
Node.js中构建RESTful API的最佳实践
【4月更文挑战第30天】本文介绍了在Node.js中构建RESTful API的最佳实践:选择合适的框架(如Express、Koa)、设计清晰的API接口(遵循HTTP动词和资源路径)、实现认证授权(JWT、OAuth 2.0)、错误处理、限流缓存、编写文档和测试,以及监控性能优化。这些实践有助于创建健壮、可维护和易用的API。
|
10天前
|
存储 关系型数据库 Go
【Go语言专栏】基于Go语言的RESTful API开发
【4月更文挑战第30天】本文介绍了使用Go语言开发RESTful API的方法,涵盖了路由、请求处理、数据存储和测试关键点。RESTful API基于HTTP协议,无状态且使用标准方法表示操作。在Go中,通过第三方库如`gorilla/mux`进行路由映射,使用`net/http`处理请求,与数据库交互可选ORM库`gorm`,测试则依赖于Go内置的`testing`框架。Go的简洁性和并发性使得它成为构建高效API的理想选择。
|
10天前
|
机器学习/深度学习 算法 安全
深度学习在图像识别中的应用与挑战构建高效可扩展的RESTful API:后端开发的实战指南
【4月更文挑战第30天】 随着计算机视觉技术的飞速发展,深度学习在图像识别领域取得了显著的成果。本文将探讨深度学习技术在图像识别中的应用及其所面临的挑战。首先,我们将介绍深度学习的基本原理和关键技术,然后分析其在图像识别中的优势和应用案例。最后,我们将讨论当前深度学习在图像识别领域所面临的主要挑战和未来的发展趋势。

推荐镜像

更多