Spring RestTemplate示例

Spring RestTemplate提供了一种测试RESTful Web服务的便捷方式。

目录[ 隐藏 ]

  • 1 Spring RestTemplate

    • 1.1 Spring RestTemplate示例
    • 1.2 Spring RestTemplate Maven依赖项
    • 1.3 Spring配置类
    • 1.4模型类
    • 1.5 Spring RestTemplate客户端类
    • 1.6 Spring RestTemplate测试类

Spring RestTemplate

  • Spring RestTemplate类是spring-webSpring 3中引入的一部分。
  • 我们可以使用RestTemplate来测试基于HTTP的restful Web服务,它不支持HTTPS协议。
  • RestTemplate类为不同的HTTP方法提供重载方法,例如GET,POST,PUT,DELETE等。

Spring RestTemplate示例

让我们看一下Spring RestTemplate示例,我们将测试在Spring Data JPA文章中创建的REST Web服务。下表说明了此休息Web服务支持的URI。

URI HTTP方法 描述
/ springData /人 得到 从数据库中获取所有人员
/ springData /人/(编号) 得到 通过id获取人物
/ springData /人 POST 将人员添加到数据库
/ springData /人 更新人
/ springData /人/(编号) 删除 按ID删除人员

让我们开始创建我们的Rest客户端项目来测试这些Web服务。

下图显示了我们最终的Spring RestTemplate示例项目。

Spring RestTemplate Maven依赖项

我们需要spring-corespring-context对于依赖Spring框架。然后我们需要spring-web包含RestTemplate类的人工制品。我们还需要jackson-mapper-asl对春JSON通过支持杰克逊 API。


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.journaldev.spring</groupId><artifactId>SpringRestTemplate</artifactId><version>1.0-SNAPSHOT</version><properties><spring.framework>4.3.0.RELEASE</spring.framework><spring.web>3.0.2.RELEASE</spring.web><serializer.version>2.8.1</serializer.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.framework}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.framework}</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.4</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.web}</version></dependency></dependencies>
</project>

Spring配置类

我们必须为RestTemplate类定义一个spring bean,这是在AppConfig类中完成的。


package com.journaldev.spring.config;import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter;
import org.springframework.web.client.RestTemplate;@Configuration
@ComponentScan("com.journaldev.spring")
public class AppConfig {@BeanRestTemplate restTemplate() {RestTemplate restTemplate = new RestTemplate();MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter();converter.setObjectMapper(new ObjectMapper());restTemplate.getMessageConverters().add(converter);return restTemplate;}
}

请注意,RestTamplate使用MessageConverter,我们需要在RestTemplate bean中设置此属性。在我们的示例中,我们MappingJacksonHttpMessageConverter用于从JSON格式获取数据。

模型类

由于我们尝试使用jackson mapper将我们的Web服务返回的JSON转换为java对象,因此我们必须为此创建模型类。请注意,此模型类与Web服务中使用的模型类非常相似,只是在这里我们不需要JPA注释。


package com.journaldev.spring.model;public class Person {private Long id;private Integer age;private String firstName;private String lastName;public Person() {}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}@Overridepublic String toString() {return "Person{" + "id=" + id + ", age=" + age + ", firstName='" + firstName + '\'' + ", lastName='" + lastName+ '\'' + '}';}
}

Spring RestTemplate客户端类

最后一步是创建将使用上面定义的RestTemplate bean的客户端类。


package com.journaldev.spring.config;import java.util.List;import org.springframework.http.HttpStatus;import com.journaldev.spring.model.Person;public interface PersonClient {List<Person> getAllPerson();Person getById(Long id);HttpStatus addPerson(Person person);void updatePerson(Person person);void deletePerson(Long id);
}

package com.journaldev.spring.config;import java.util.Arrays;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import com.journaldev.spring.model.Person;@Service
public class PersonClientImpl implements PersonClient {@AutowiredRestTemplate restTemplate;final String ROOT_URI = "http://localhost:8080/springData/person";public List<Person> getAllPerson() {ResponseEntity<Person[]> response = restTemplate.getForEntity(ROOT_URI, Person[].class);return Arrays.asList(response.getBody());}public Person getById(Long id) {ResponseEntity<Person> response = restTemplate.getForEntity(ROOT_URI + "/"+id, Person.class);return response.getBody();}public HttpStatus addPerson(Person person) {ResponseEntity<HttpStatus> response = restTemplate.postForEntity(ROOT_URI, person, HttpStatus.class);return response.getBody();}public void updatePerson(Person person) {restTemplate.put(ROOT_URI, person);}public void deletePerson(Long id) {restTemplate.delete(ROOT_URI + id);}
}

代码是自我理解的,我们基于URI和HTTP方法调用RestTemplate方法,并在需要时传递适当的请求对象。

Spring RestTemplate测试类

是时候测试我们的Spring RestTemplate示例项目了,下面的类展示了如何在Spring方式中使用RestTemplate方法。


package com.journaldev.spring;import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.http.HttpStatus;import com.journaldev.spring.config.AppConfig;
import com.journaldev.spring.config.PersonClient;
import com.journaldev.spring.model.Person;public class Main {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);PersonClient client = applicationContext.getBean(PersonClient.class);System.out.println("Getting list of all people:");for (Person p : client.getAllPerson()) {System.out.println(p);}System.out.println("\nGetting person with ID 2");Person personById = client.getById(2L);System.out.println(personById);System.out.println("Adding a Person");Person p = new Person();p.setAge(50);p.setFirstName("David");p.setLastName("Blain");HttpStatus status = client.addPerson(p);System.out.println("Add Person Response = " + status);applicationContext.close();}
}

当我针对我的本地设置运行上面的程序时,我得到以下输出。


Getting list of all people:
Person{id=2, age=30, firstName='Oksi', lastName=' Bahatskaya'}
Person{id=1, age=30, firstName='Vlad', lastName='Mateo'}Getting person with ID 2
Person{id=2, age=30, firstName='Oksi', lastName=' Bahatskaya'}
Adding a Person
Add Person Response = 201

下图显示了执行上述程序之前和之后的Web服务数据库表数据。

如您所见,程序输出与样本表数据匹配。这就是Spring RestTemplate示例,您可以从下面的链接下载项目。

下载Spring RestTemplate示例项目

参考:API Doc

Spring RestTemplate示例相关推荐

  1. 具有链接资源的Spring RestTemplate

    Spring Data REST是一个了不起的项目,它提供了一些机制来将基于Spring Data的存储库中的资源公开为REST资源. 使用链接资源公开服务 考虑两个简单的基于JPA的实体,课程和教师 ...

  2. 使用Spring RestTemplate和Super类型令牌消费Spring-hateoas Rest服务

    Spring-hateoas为应用程序创建遵循HATEOAS原理的基于REST的服务提供了一种极好的方法. 我的目的不是要展示如何创建服务本身,而是要展示如何将客户端写入服务. 我将要使用的示例服务是 ...

  3. Struts2+Hibernate+Spring 整合示例

    转自:https://blog.csdn.net/tkd03072010/article/details/7468769 Struts2+Hibernate+Spring 整合示例 Spring整合S ...

  4. Spring RestTemplate中文乱码解决方案

    Spring RestTemplate中文乱码解决方案 参考文章: (1)Spring RestTemplate中文乱码解决方案 (2)https://www.cnblogs.com/accesski ...

  5. java 获取400的错误信息_获取400错误的请求Spring RestTemplate POST

    我想使用POST方法使用Spring Rest web服务.我无法在客户端(网站)访问POJO文件,因此必须在客户端使用JSON并在Web服务中使用POJO.下面是我的代码:获取400错误的请求Spr ...

  6. Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求

    Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939 版权声明:本 ...

  7. spring boot示例_Spring Boot完成示例

    spring boot示例 这篇文章提供了一个使用Spring Boot开发松耦合的REST服务的完整示例. 使用spring boot,我们可以开发可独立运行的生产就绪的Java应用程序,使其成为独 ...

  8. spring aop示例_Spring查找方法示例

    spring aop示例 当一个bean依赖于另一个bean时,我们使用setter属性或通过构造函数注入bean. getter方法将向我们返回已设置的引用,但是假设您每次调用getter方法时都想 ...

  9. spring boot示例_Spring Boot上的Spring社交示例,或者我如何停止担心和喜欢自动配置...

    spring boot示例 对于Spring Boot 1.1.0.RC1,添加了自动配置和Spring Social的启动程序pom,这意味着我不必向pom添加一百个依赖关系,并且将为我处理许多毫无 ...

最新文章

  1. js判断鼠标靠近屏幕最侧面的监听_threejs按鼠标位置缩放场景
  2. Tomcat服务器端口的配置
  3. More than one file was found with OS independent path
  4. 数据库面试题【十三、大表数据查询,怎么优化】
  5. 牛客假日团队赛5 L Catch That Cow HDU 2717 (BFS)
  6. eclipse启动tomcat无法访问
  7. leetcode383. 赎金信(两种做法)
  8. ECC椭圆曲线加密算法原理
  9. Entity Framework默认值字段不起作用解决方法
  10. python多进程运行死机_python多进程假死
  11. Elasticsearc 6.x以后不再支持mapping下多个type
  12. 深入解读OpenSURF中快速黑塞矩阵计算的思想——FastHessian_buildResponseLayer
  13. 沈阳农业大学计算机专业排名,2019沈阳农业大学专业排名
  14. 淘宝彩票移动项目开发实践
  15. 分割 fasta 文件
  16. iOS-键盘弹出的类型
  17. 最近的大哥(单调栈)
  18. 穆迪ESG解决方案事业部旗下公司V.E就西班牙王国的主权绿色债券框架提供第二方意见
  19. 郑州旅游网页设计制作 简单静态HTML网页作品 我的家乡网页作业成品 学生旅游网站模板
  20. SICNUOJ——meng新计划要求规范

热门文章

  1. 深入理解JavaScript系列:This? Yes,this!
  2. win 7 或 mac 远程桌面到 ubuntu (ssh)
  3. 5款WordPress推荐文章幻灯片插件
  4. C/C++——打开文件存储数据的各种方式
  5. 【NIPS2020】 Workshop List
  6. Java—格式化日期/时间
  7. 基于springcloud的开发者实践:hystrix-dashboard熔断仪表盘
  8. try...catch...finally java
  9. 日期控件的使用 c# 114867852
  10. 随机数的生成 java