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

推荐大家用。

相关文章
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
60 4
|
1月前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
98 2
|
3月前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
74 7
|
3月前
|
前端开发 测试技术 开发者
MVC模式在现代Web开发中有哪些优势和局限性?
MVC模式在现代Web开发中有哪些优势和局限性?
|
4月前
|
Java API 数据库
【神操作!】Spring Boot打造RESTful API:从零到英雄,只需这几步,让你的Web应用瞬间飞起来!
【8月更文挑战第12天】构建RESTful API是现代Web开发的关键技术之一。Spring Boot因其实现简便且功能强大而深受开发者喜爱。本文以在线图书管理系统为例,展示了如何利用Spring Boot快速构建RESTful API。从项目初始化、实体定义到业务逻辑处理和服务接口实现,一步步引导读者完成API的搭建。通过集成JPA进行数据库操作,以及使用控制器类暴露HTTP端点,最终实现了书籍信息的增删查改功能。此过程不仅高效直观,而且易于维护和扩展。
76 1
|
4月前
|
开发者 前端开发 Java
架构模式的诗与远方:如何在MVC的田野上,用Struts 2编织Web开发的新篇章
【8月更文挑战第31天】架构模式是软件开发的核心概念,MVC(Model-View-Controller)通过清晰的分层和职责分离,成为广泛采用的模式。随着业务需求的复杂化,Struts 2框架应运而生,继承MVC优点并引入更多功能。本文探讨从MVC到Struts 2的演进,强调架构模式的重要性。MVC将应用程序分为模型、视图和控制器三部分,提高模块化和可维护性。
50 0
|
4月前
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `&lt;rest&gt;` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
69 0
|
4月前
|
Java 开发者 前端开发
Struts 2、Spring MVC、Play Framework 上演巅峰之战,Web 开发的未来何去何从?
【8月更文挑战第31天】在Web应用开发中,Struts 2框架因强大功能和灵活配置备受青睐,但开发者常遇配置错误、类型转换失败、标签属性设置不当及异常处理等问题。本文通过实例解析常见难题与解决方案,如配置文件中遗漏`result`元素致页面跳转失败、日期格式不匹配需自定义转换器、`&lt;s:checkbox&gt;`标签缺少`label`属性致显示不全及Action中未捕获异常影响用户体验等,助您有效应对挑战。
96 0
|
4月前
|
前端开发 API 开发者
JSF与RESTful服务的完美邂逅:如何打造符合现代Web潮流的数据交互新体验
【8月更文挑战第31天】随着互联网技术的发展,RESTful架构风格因其实现简便与无状态特性而在Web服务构建中日益流行。本文探讨如何结合JavaServer Faces (JSF) 和 JAX-RS 构建RESTful API,展示从前端到后端分离的完整解决方案。通过定义资源类、配置 `web.xml` 文件以及使用依赖注入等步骤,演示了在JSF项目中实现RESTful服务的具体过程,为Java开发者提供了实用指南。
47 0
|
4月前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
55 0

推荐镜像

更多