RestTemplate实现接口访问获取数据
- 设置url地址
- 设置http响应头内容
- 设置访问请求参数
- 利用RequestEntity封装请求
- 通过restTemplate发送请求url,主体,返回值类型
- Stream流数据处理提取/LinkedHashMap自动转换位对应的实体类
@GetMapping("/flowTotal")
public void flowTotal() throws URISyntaxException {
// 1.设置接口Url地址
String url = "http://cloud.gmyyun.com/api/assets/passenger-flow/foreign/get-flow-total";
// 2.设置http响应头内容,返回值,接受值不需要设置
HttpHeaders headers = new HttpHeaders();
headers.add("token","eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2NjE3MzU4NjgsIm5iZiI6MTY2MTczNTg2OCwiZXhwIjoxNjYxNzQzMDY4LCJQQVlMT0FEX0NMQUlNIjp7InVzZXJJZCI6IkFQSV9VU0VSMDAwMDc2IiwidGVuYW50SWQiOiJURU5BTlQwMDAwMTIiLCJ0b2tlbiI6bnVsbH19.uWAkBz9Yi9m1y59f2wb7dsSagu7pIex6fe_awD0eaUo");
// 3.设置访问的请求参数
ToiletParam toiletParam = new ToiletParam();
toiletParam.setToiletId("TOILET-12-018");
// 4.利用RequestEntity封装请求,分别有url地址,响应头,响应体;
RequestEntity<ToiletParam> request = RequestEntity.post(new URI(url)).headers(headers).body(toiletParam);
// 5.通过restTemplate发送请求,url,请求实例,返回值类型
ResultVo resultVo = restTemplate.postForObject(url, request, ResultVo.class);
// 6.Stream流处理数据
if (null != resultVo.getData() && !resultVo.getData().isEmpty()){
List<LinkedHashMap<String, Object>> data = resultVo.getData();
// 7.LinkedHashMap自动转换为对应的实体类集合
ObjectMapper mapper = new ObjectMapper();
// new TypeReference和底层反射原理有关
List<FlowTotalEntity> flowTotalEntities = mapper.convertValue(data, new TypeReference<List<FlowTotalEntity>>() {
});
System.out.println(flowTotalEntities);
}
}
- 第一点:注意RequestEneity链式调用中的headers可以直接通过lambda表达式赋值,不需要在外面在new一个,
- 第二点:就是将linkedHashMap也就是传过来的json数据转换的时候可以通过ObjectMapper实现自动转换,当然也可以直接foreach自己转换为list对象类型
- 请求实例一共封装三部分,URL是一个实体类对象不是String类型,响应头,响应主体可以是Map集合也可以是实体类