1.介绍

创建RestTemplate类是在Spring中执行客户端HTTP操作的中心工具。它提供了一些构建HTTP请求和处理响应的实用方法。

而且,既然创建RestTemplate集成与杰克逊,它可以轻松地从JSON序列化/反序列化大多数对象。然而,使用对象集合并不是那么简单

在本教程中,我们将看到如何使用创建RestTemplate两个得到帖子对象列表。

进一步阅读:

Spring RestTemplate错误处理

学习如何用Spring的RestTemplate处理错误

RestTemplate使用JSON Post请求

学习如何使用Spring的RestTemplate发送带有JSON内容的请求。

2.示例服务

我们将使用一个员工API,它有两个HTTP端点——get all和create:

  • GET /员工
  • POST /员工

对于客户端和服务器之间的通信,我们将使用一个简单的DTO来封装基本的员工数据:

public class Employee {public long id;公共字符串标题;//标准构造函数和setter /getters}

现在我们已经准备好编写使用创建RestTemplate获取并创建列表员工对象。

3.获取对象列表创建RestTemplate

在调用GET时,通常可以使用创建RestTemplate,如:

getForObject(URI url, Class responseType)

这将使用GET谓词向指定的URI发送请求,并将响应体转换为所请求的Java类型。这对大多数类都很有效,但它有一个限制:我们不能发送对象列表。

问题是由于Java泛型的类型擦除。当应用程序运行时,它不知道列表中是什么类型的对象。这意味着列表中的数据不能反序列化为适当的类型。

幸运的是,我们有两个选择来解决这个问题。

3.1。使用数组

首先,我们可以使用创建RestTemplate。getForEntity ()方法获取对象数组responseType参数。无论我们在那里指定will matchResponseEntity参数类型:

ResponseEntity response = restTemplate。getForEntity(“http://localhost: 8080 /员工/员工[]. class);Employee[] Employee = response.getBody();

此外,我们可以使用RestTemplate.exchange达到同样的结果。

注意,在这里做繁重工作的合作者是ResponseExtractor,如果我们需要进一步定制,我们可以调用执行并提供我们自己的实例。

3.2。使用包装类

一些api将返回包含雇员列表的顶级对象,而不是直接返回该列表。为了处理这种情况,我们可以使用包含雇员列表的包装器类。

public class EmployeeList {private List<雇员>;public EmployeeList() {employee = new ArrayList<>();//标准构造函数和getter/setter

现在我们可以用更简单的方法getForObject ()获取员工列表的方法:

EmployeeList response = restTemplate。getForObject (" http://localhost: 8080 /员工”,EmployeeList.class);List employees = response. getemploemployees ();

这段代码要简单得多,但是需要一个额外的包装器对象。

4.发布一个对象列表创建RestTemplate

现在让我们看看如何从客户机向服务器发送对象列表。就像上面一样,创建RestTemplate提供了一个简化的方法来调用POST:

postForObject(URI url,对象请求,类 responseType)

这将向给定的URI发送一个HTTP POST,带有可选的请求体,并将响应转换为指定的类型。与上面的GET场景不同,我们不需要担心类型擦除金宝搏官网188be

这是因为现在我们从Java对象转向JSON。对象列表及其类型是JVM所知道的,因此可以正确地序列化:

List<员工> newEmployees = new ArrayList<>();newEmployees。add(新员工(实习生));newEmployees。add(新员工(4,“首席执行官”));创建restTemplate。postForObject(“http://localhost:8080/employees/”,newEmployees, ResponseEntity.class);

4.1。使用包装类

如果我们需要使用包装器类来与上面的GET场景保持一致,那也很简单。我们可以发送一个新的列表使用创建RestTemplate:

List<员工> newEmployees = new ArrayList<>();newEmployees。add(新员工(实习生));newEmployees。add(新员工(4,“首席执行官”));创建restTemplate。postForObject(“http://localhost:8080/employees”,新的EmployeeList(newEmployees), ResponseEntity.class);

5.结论

使用RestTemplate是构建与服务通信的HTTP客户机的一种简单方法。

它提供了许多用于处理每个HTTP方法和简单对象的方法。只需要一点额外的代码,我们就可以轻松地使用它来处理对象列表。

类中提供了完整的代码Github项目

通用的底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
3.评论
最古老的
最新的
内联反馈
查看所有评论
对这篇文章的评论关闭!