Spring RestTemplate示例
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-web
Spring 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-core
,spring-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示例相关推荐
- 具有链接资源的Spring RestTemplate
Spring Data REST是一个了不起的项目,它提供了一些机制来将基于Spring Data的存储库中的资源公开为REST资源. 使用链接资源公开服务 考虑两个简单的基于JPA的实体,课程和教师 ...
- 使用Spring RestTemplate和Super类型令牌消费Spring-hateoas Rest服务
Spring-hateoas为应用程序创建遵循HATEOAS原理的基于REST的服务提供了一种极好的方法. 我的目的不是要展示如何创建服务本身,而是要展示如何将客户端写入服务. 我将要使用的示例服务是 ...
- Struts2+Hibernate+Spring 整合示例
转自:https://blog.csdn.net/tkd03072010/article/details/7468769 Struts2+Hibernate+Spring 整合示例 Spring整合S ...
- Spring RestTemplate中文乱码解决方案
Spring RestTemplate中文乱码解决方案 参考文章: (1)Spring RestTemplate中文乱码解决方案 (2)https://www.cnblogs.com/accesski ...
- java 获取400的错误信息_获取400错误的请求Spring RestTemplate POST
我想使用POST方法使用Spring Rest web服务.我无法在客户端(网站)访问POJO文件,因此必须在客户端使用JSON并在Web服务中使用POJO.下面是我的代码:获取400错误的请求Spr ...
- Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求
Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939 版权声明:本 ...
- spring boot示例_Spring Boot完成示例
spring boot示例 这篇文章提供了一个使用Spring Boot开发松耦合的REST服务的完整示例. 使用spring boot,我们可以开发可独立运行的生产就绪的Java应用程序,使其成为独 ...
- spring aop示例_Spring查找方法示例
spring aop示例 当一个bean依赖于另一个bean时,我们使用setter属性或通过构造函数注入bean. getter方法将向我们返回已设置的引用,但是假设您每次调用getter方法时都想 ...
- spring boot示例_Spring Boot上的Spring社交示例,或者我如何停止担心和喜欢自动配置...
spring boot示例 对于Spring Boot 1.1.0.RC1,添加了自动配置和Spring Social的启动程序pom,这意味着我不必向pom添加一百个依赖关系,并且将为我处理许多毫无 ...
最新文章
- js判断鼠标靠近屏幕最侧面的监听_threejs按鼠标位置缩放场景
- Tomcat服务器端口的配置
- More than one file was found with OS independent path
- 数据库面试题【十三、大表数据查询,怎么优化】
- 牛客假日团队赛5 L	Catch That Cow HDU 2717 (BFS)
- eclipse启动tomcat无法访问
- leetcode383. 赎金信(两种做法)
- ECC椭圆曲线加密算法原理
- Entity Framework默认值字段不起作用解决方法
- python多进程运行死机_python多进程假死
- Elasticsearc 6.x以后不再支持mapping下多个type
- 深入解读OpenSURF中快速黑塞矩阵计算的思想——FastHessian_buildResponseLayer
- 沈阳农业大学计算机专业排名,2019沈阳农业大学专业排名
- 淘宝彩票移动项目开发实践
- 分割 fasta 文件
- iOS-键盘弹出的类型
- 最近的大哥(单调栈)
- 穆迪ESG解决方案事业部旗下公司V.E就西班牙王国的主权绿色债券框架提供第二方意见
- 郑州旅游网页设计制作 简单静态HTML网页作品 我的家乡网页作业成品 学生旅游网站模板
- SICNUOJ——meng新计划要求规范
热门文章
- 深入理解JavaScript系列:This? Yes,this!
- win 7 或 mac 远程桌面到 ubuntu (ssh)
- 5款WordPress推荐文章幻灯片插件
- C/C++——打开文件存储数据的各种方式
- 【NIPS2020】 Workshop List
- Java—格式化日期/时间
- 基于springcloud的开发者实践:hystrix-dashboard熔断仪表盘
- try...catch...finally java
- 日期控件的使用 c# 114867852
- 随机数的生成 java