使用restTemplate远程调controller路径取数据
目录
- restTemplate远程调controller路径取数据
- 首先要写相关配置类,举例:
- 然后调目标cotroller层,比如目标cotroller层为
- 需要用post的方法去调
- 再比如目标controller层为
- 需要用get的方法去调
- 通过Spring的RestTemplate进行跨模块调用
- 相关代码如图下所示:
- 相关代码可参考图下所示:
- 运行结果如下所示:
restTemplate远程调controller路径取数据 Spring的RestTemplate提供了很多对HTTP method的支持,这里主要说常用的get和post。
使用环境为springboot
首先要写相关配置类,举例:
@Configurationpublic class Config {@AutowiredRestTemplateBuilder builder; @Beanpublic RestTemplate restTemplate() {return builder.build(); }}
然后调目标cotroller层,比如目标cotroller层为
@RestController@RequestMapping("/aaa")public class TemplateController {@PostMapping(value = "https://www.it610.com/ppp")public List getInfo(@RequestBody String sid) {...return stuService.getId(areaId); }}
需要用post的方法去调
@Autowiredprivate RestTemplate restTemplate; public List getMsg() {String id = "111"; HttpEntity entity = buildEntity(id); String url = "http://ip:port/aaa/ppp"; return restTemplate.postForObject(url, entity, List.class); }private HttpEntity buildEntity(String id) {JSONObject jo = new JSONObject(); jo.put("sid", id); String requestJson = jo.toJSONString(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); return new HttpEntity(requestJson, headers); }
再比如目标controller层为
@RestController@RequestMapping(value = "https://www.it610.com/aaa")public class StudentController {@GetMapping(value = "https://www.it610.com/ggg")public Set queryStudent(@RequestParam(value = "https://www.it610.com/article/code") String code,@RequestParam(value = "https://www.it610.com/article/objectKey") String objectKey,@RequestParam(value = "https://www.it610.com/article/studentId") Integer studentId) {return sService.get(code, objectKey, kindId); }}
需要用get的方法去调
@Autowiredprivate RestTemplate restTemplate; public Set queryStudent(String ip, int port,EventRelationTask eventRelationTask) {Integer studentId = eventRelationTask.getStudentId(); String code = eventRelationTask.getCode(); String objectKey = eventRelationTask.getObjectKey(); String url ="http://" + ip + ":" + port + Student.PROJECTNAME + "event/queryparentnode?code=" + code + "&objectKey=" + objectKey + "&studentId=" + studentId; Set students = new HashSet<>(); students = restTemplate.getForObject(url, Set.class); //主要这个方法if (students != null) {return students; }return new HashSet(); }
通过Spring的RestTemplate进行跨模块调用 Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现对象与json的序列化和反序列化。首先在项目中新建controller方法
相关代码如图下所示:
文章图片
接着我们在另外一个项目中的启动类的位置注册一个RestTemplate实例
相关代码可参考图下所示:
【使用restTemplate远程调controller路径取数据】
文章图片
然后创建HttpTestController使用RestTemplate中最简单的一个功能getForEntity发起了一个get请求去调用前一个项目中服务端的数据并返回结果。
文章图片
最后访问http://localhost:8080/httpTestController/queryByname?name=张三就能看到list打印传递的值。需要注意的是图1是第一个项目请求的,图2是第二个项目通过跨服务跨项目请求得来的,它们两者的端口号是不一样的
运行结果如下所示:
文章图片
(图1)
文章图片
(图2)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- android|android studio中ndk的使用