1.介绍
的创建RestTemplate类是在Spring中执行客户端HTTP操作的中心工具。它提供了一些构建HTTP请求和处理响应的实用方法。
而且,既然创建RestTemplate集成与杰克逊,它可以轻松地从JSON序列化/反序列化大多数对象。然而,使用对象集合并不是那么简单。
在本教程中,我们将看到如何使用创建RestTemplate两个得到和帖子对象列表。
进一步阅读:
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
这将使用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,对象请求,类
这将向给定的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项目。