欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 远程接口调用

远程接口调用

2025/4/23 3:03:29 来源:https://blog.csdn.net/Helen_1997_1997/article/details/145184239  浏览:    关键词:远程接口调用

目录

GET请求

案例1:

案例2: 

案例3:查询新闻列表  

POST请求

PUT请求

DELETE请求

通用

传json参数


        在服务端使用java语言,向远程接口发起请求,得到响应数据的方法。实现远程接口调用方法很多,这里我们学习spring封装的工具类RestTemplate,使用起来最方便简单。

GET请求

要调用的接口是Get请求:

代码实现: 

案例1:

@RestController
@RequestMapping("/news")
public class NewsController {/*** 服务对象*/@Resourceprivate NewsService newsService;@GetMapping("/test1")public R test1() {RestTemplate restTemplate = new RestTemplate();String url = "http://127.0.0.1:8080/dynamics/page?pageNum=1&pageSize=5";// 返回的数据类型是ResponseEntityResponseEntity<R> responseEntity = restTemplate.getForEntity(url, R.class);// 获取bodyR body = responseEntity.getBody();// 获取headerHttpHeaders headers = responseEntity.getHeaders();return body;}
}

运行结果: 

将RestTemplate放到容器里:

@SpringBootApplication
@MapperScan("com.javaplay.playPal.*.dao")
public class AdminApiApplication {public static void main(String[] args) {SpringApplication.run(AdminApiApplication.class, args);}@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}

案例2: 

@Resource
RestTemplate restTemplate;
@GetMapping("/test2/{id}")
public R test2(@PathVariable Integer id) {String url = "http://127.0.0.1:8080/dynamics/{0}";// 返回的数据类型是ResponseEntityR r = restTemplate.getForObject(url, R.class, id);return r;
}

ResponseEntity<R> responseEntity = restTemplate.getForEntity(url, R.class);
R r = restTemplate.getForObject(url, R.class, id);

案例3:查询新闻列表  

对应的嵌套实体类:

@Data
public class NewsResult {private Integer code;private String msg;private NewsData result;
}@Data
public class NewsData {private List<NewsModel> list;
}@Data
public class NewsModel {private Long hotindex;private String word;
}

NewsController: 

// 查看新闻列表
@GetMapping("/list")
public R newsList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,@RequestParam(value = "pageSize", defaultValue = "3") Integer pageSize) {// 查询新闻的信息// 新闻接口,有访问次数限制,所以,不能直接从第三方接口直接获取数据,要从Redis中查询List<NewsModel> list = newsService.queryList(pageNum, pageSize);return R.ok(list);
}@GetMapping("/sync")
public R syncNews() {// 查询远程接口 第三方数据,把查询结果存入本地Redis中newsService.syncNews();return R.ok();
}

NewsServiceImpl: 

@Service("newsService")
public class NewsServiceImpl extends ServiceImpl<NewsDao, News> implements NewsService {@Resourceprivate RestTemplate restTemplate;@Resourceprivate RedisTemplate<String, Object> redisTemplate;@Overridepublic List<NewsModel> syncNews() {String url = "https://apis.tianapi.com/toutiaohot/index?key=6892c7b76be5a14dd99473e400f44b48";// 改接口返回值是json数据,所以需要使用RestTemplate来获取数据NewsResult object = restTemplate.getForObject(url, NewsResult.class);List<NewsModel> list = object.getResult().getList();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");String t = simpleDateFormat.format(new Date());// news:day:20250116String key = String.format(RedisKeys.NewsDayList, t);Collection<Object> collection = new ArrayList<>(list);// 将新增列表数据存入Redis中redisTemplate.opsForList().rightPushAll(key, collection);// 设置过期时间redisTemplate.expire(key, 2, TimeUnit.HOURS);return list;}@Overridepublic List<NewsModel> queryList(Integer pageNum, Integer pageSize) {String key = String.format(RedisKeys.NewsDayList,new SimpleDateFormat("yyyyMMdd").format(new Date()));// 查询总条数Long total = redisTemplate.opsForList().size(key);// 页面起始位置int start = (pageNum - 1) * pageSize;List<NewsModel> list;if (total <= 0L) {// redis中没有数据,则调用接口同步数据list = syncNews();// total = (long) list.size();int end = Math.min(start + pageSize - 1, list.size() - 1);list = list.subList(start, end + 1);} else {int end = Math.min(start + pageSize - 1, total.intValue() - 1);// redis中有数据,则从redis中查询数据List<Object> objectList = redisTemplate.opsForList().range(key, start, end);list = objectList.stream().map(o -> (NewsModel) o).collect(Collectors.toList());}return list;}public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");list.add("f");Integer pageNum = 2;Integer pageSize = 3;int start = (pageNum - 1) * pageSize;System.out.println("start:" + start);int end = Math.min(start + pageSize - 1, 50 - 1);System.out.println("end:" + end);List<String> subList = list.subList(start, end + 1);System.out.println(subList);}
}

POST请求

想要调用的接口:

@PostMapping("/save")
public R save(Dynamics dynamics) {dynamicsService.save(dynamics);return R.ok(dynamics);
}

编写代码调用接口:

// post请求
@GetMapping("/test3")
public R test3() {String url = "http://127.0.0.1:8080/dynamics/save";// 参数MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();map.add("content", "新闻动态1");map.add("likenum", 4);map.add("uid", 9);map.add("type", 1);// 设置headerHttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);// 设置request对象HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map, headers);ResponseEntity<R> rResponseEntity = restTemplate.postForEntity(url, request, R.class);return rResponseEntity.getBody();
}

新增数据成功: 

PUT请求

想要调用的接口:

@PutMapping("/update")
public R update2(Dynamics dynamics) {dynamicsService.updateById(dynamics);return R.ok(dynamics);
}

编写代码调用接口:

// put请求
@GetMapping("/test4")
public R test4() {String url = "http://127.0.0.1:8080/dynamics/update";// 参数MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();map.add("id", 13);map.add("content", "美好时光海苔");map.add("likenum", 20);restTemplate.put(url, map);return R.ok();
}

修改数据成功: 

DELETE请求

想要调用的接口:

@DeleteMapping("/del/{id}")
public R deleteById(@PathVariable Integer id) {dynamicsService.removeById(id);return R.ok();
}

编写代码调用接口:

// delete请求
@GetMapping("/test5")
public R test5() {String url = "http://127.0.0.1:8080/dynamics/del/{0}";restTemplate.delete(url, 16);return R.ok();
}

修改数据成功: 

通用

// 通用
@GetMapping("/test6")
public R test6() {String url = "http://127.0.0.1:8080/dynamics/save";MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();// 参数,相当于一个表达提交map.add("content", "新闻动态2");map.add("likenum", 8);map.add("uid", 9);map.add("type", 1);// 设置headerHttpHeaders headers = new HttpHeaders();String token = TokenUtil.generateToken("13");headers.add(TokenUtil.Server_Token_Key, token);// 表单提交的请求headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);// request对象HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map, headers);ResponseEntity<R> response = restTemplate.exchange(url, HttpMethod.POST, request, R.class);return response.getBody();
}

传json参数

想要调用的接口:

@PostMapping
public R insert(@RequestBody Dynamics dynamics) {return R.ok(this.dynamicsService.save(dynamics));
}

定义一个VO: 

@Data
public class DynamicVo {private Integer uid;private String content;private Integer likenum;private Integer type;
}

编写代码调用接口:

@GetMapping("/test7")
public R test7() {String url = "http://127.0.0.1:8080/dynamics";DynamicVo dynamicVo = new DynamicVo();dynamicVo.setContent("新闻动态3");dynamicVo.setLikenum(10);dynamicVo.setUid(9);dynamicVo.setType(1);// 设置表单提交的方式HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);HttpEntity<DynamicVo> request = new HttpEntity<>(dynamicVo, headers);return restTemplate.postForObject(url, request, R.class);
}

接口调用成功: 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词