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解析包,比较好用

推荐大家用。

目录
相关文章
|
4天前
|
JSON 算法 安全
探索RESTful API设计的最佳实践
【9月更文挑战第2天】在数字化时代的浪潮中,后端开发如同搭建一座桥梁,连接着用户与数据的无限可能。本文将深入探讨如何打造高效、可维护的RESTful API,从资源命名到状态码的巧妙运用,每一个细节都隐藏着提升用户体验的智慧。你将学会如何在浩瀚的代码海洋中,用简洁明了的设计原则,引领用户安全抵达数据的彼岸。让我们一起启航,探索API设计的奥秘,让后端开发成为艺术与科学的完美结合。
|
3天前
|
缓存 JavaScript 前端开发
深入浅出:使用Node.js构建RESTful API
【9月更文挑战第3天】在数字化浪潮中,后端开发如同搭建一座连接用户与数据的桥梁。本文将带领读者从零开始,一步步用Node.js搭建一个功能完备的RESTful API。我们将探索如何设计API的结构、处理HTTP请求以及实现数据的CRUD操作,最终通过一个简单的实例,展示如何在真实世界中应用这些知识。无论你是初学者还是有一定经验的开发者,这篇文章都会为你揭示后端开发的奥秘,让你轻松入门并掌握这一技能。
16 3
|
1天前
|
前端开发 API 数据安全/隐私保护
深入浅出理解RESTful API设计
【9月更文挑战第5天】在数字世界的海洋里,API是连接不同软件的桥梁。本文将带你深入探索RESTful API设计的精髓,从基础概念到进阶实践,让你掌握如何构建高效、易用的后端服务接口。
|
1天前
|
XML JSON 缓存
探索后端开发中的RESTful API设计原则
【9月更文挑战第5天】在数字化时代的浪潮中,后端开发扮演着支撑整个互联网世界运行的基石角色。而作为连接前端与后端桥梁的RESTful API,其设计质量直接影响到应用的性能和用户体验。本文将深入探讨RESTful API的设计原则,通过浅显易懂的语言和实际代码示例,引导读者理解如何构建高效、易于维护的API。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和思考。
|
5天前
|
前端开发 API 数据格式
探索RESTful API设计的艺术
【8月更文挑战第33天】在数字世界的海洋中,API是连接不同软件系统的桥梁。本文将带你走进RESTful API的设计世界,通过深入浅出的方式,探讨如何打造高效、可扩展的后端服务。我们将一起学习如何运用最佳实践来构建API,确保它们既易于使用又具备强大的功能。准备好让你的后端技能更上一层楼了吗?让我们开始吧!
|
5天前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
25 7
|
2天前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
11 2
|
5天前
|
存储 API 定位技术
打造高效后端:RESTful API设计的艺术
【9月更文挑战第1天】在数字化时代的浪潮中,RESTful API已成为连接不同软件系统的桥梁。本文将引导你理解RESTful API的设计原则,探讨如何构建一个既高效又易于维护的后端服务,并通过实际代码示例加深理解。我们将一起探索API设计的精髓,让你的应用在信息海洋中航行得更加顺畅。
23 5
|
4天前
|
Java API Apache
从零到英雄的蜕变:如何用Apache Wicket打造你的第一个Web应用——不仅是教程,更是编程之旅的启航
【9月更文挑战第4天】学习Apache Wicket这一开源Java Web应用框架是一段激动人心的旅程。本文将指导你通过Maven搭建环境,并创建首个“Hello, World!”应用。从配置`pom.xml`到实现`HelloWorldApplication`类,再到`web.xml`的设置,一步步教你构建与部署简单网页。适合初学者快速上手,体验其简洁API与强大组件化设计的魅力。
|
5天前
|
JSON JavaScript 中间件
深入浅出Node.js: 从零开始构建RESTful API
【8月更文挑战第34天】 在数字时代的浪潮中,掌握如何构建高效、可靠的后端服务是每一位开发者的必备技能。本文将通过浅显易懂的语言和实际代码示例,带领初学者走进Node.js的世界,一步步搭建起自己的RESTful API。无论你是编程新手,还是想扩展技术栈的老手,这篇文章都将是你的良师益友。让我们一起探索Node.js的魅力,开启后端开发之旅!

推荐镜像

更多
下一篇
DDNS