使用restTemplate遠(yuǎn)程調(diào)controller路徑取數(shù)據(jù)
restTemplate遠(yuǎn)程調(diào)controller路徑取數(shù)據(jù)
Spring的RestTemplate提供了很多對(duì)HTTP method的支持,這里主要說常用的get和post。
使用環(huán)境為springboot
首先要寫相關(guān)配置類,舉例:
@Configuration public class Config { @Autowired RestTemplateBuilder builder; @Bean public RestTemplate restTemplate() { return builder.build(); } }
然后調(diào)目標(biāo)cotroller層,比如目標(biāo)cotroller層為
@RestController @RequestMapping("/aaa") public class TemplateController { @PostMapping(value = "/ppp") public List<Students> getInfo(@RequestBody String sid) { ... return stuService.getId(areaId); } }
需要用post的方法去調(diào)
@Autowired private RestTemplate restTemplate; public List<Student> getMsg() { String id = "111"; HttpEntity<String> entity = buildEntity(id); String url = "http://ip:port/aaa/ppp"; return restTemplate.postForObject(url, entity, List.class); } private HttpEntity<String> 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<String>(requestJson, headers); }
再比如目標(biāo)controller層為
@RestController @RequestMapping(value = "/aaa") public class StudentController { @GetMapping(value = "/ggg") public Set<Students> queryStudent(@RequestParam(value = "code") String code, @RequestParam(value = "objectKey") String objectKey, @RequestParam(value = "studentId") Integer studentId) { return sService.get(code, objectKey, kindId); } }
需要用get的方法去調(diào)
@Autowired private 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<Student> students = new HashSet<>(); students = restTemplate.getForObject(url, Set.class); //主要這個(gè)方法 if (students != null) { return students; } return new HashSet(); }
通過Spring的RestTemplate進(jìn)行跨模塊調(diào)用
Spring提供了一個(gè)RestTemplate模板工具類,對(duì)基于Http的客戶端進(jìn)行了封裝,并且實(shí)現(xiàn)對(duì)象與json的序列化和反序列化。首先在項(xiàng)目中新建controller方法
相關(guān)代碼如圖下所示:
接著我們?cè)诹硗庖粋€(gè)項(xiàng)目中的啟動(dòng)類的位置注冊(cè)一個(gè)RestTemplate實(shí)例
相關(guān)代碼可參考圖下所示:
然后創(chuàng)建HttpTestController使用RestTemplate中最簡(jiǎn)單的一個(gè)功能getForEntity發(fā)起了一個(gè)get請(qǐng)求去調(diào)用前一個(gè)項(xiàng)目中服務(wù)端的數(shù)據(jù)并返回結(jié)果。
最后訪問http://localhost:8080/httpTestController/queryByname?name=張三就能看到list打印傳遞的值。需要注意的是圖1是第一個(gè)項(xiàng)目請(qǐng)求的,圖2是第二個(gè)項(xiàng)目通過跨服務(wù)跨項(xiàng)目請(qǐng)求得來的,它們兩者的端口號(hào)是不一樣的
運(yùn)行結(jié)果如下所示:
(圖1)
(圖2)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)的連續(xù)奇數(shù)(n+2*x)是合數(shù)的算法題暴力算法
這篇文章主要介紹了Java實(shí)現(xiàn)的連續(xù)奇數(shù)(n+2*x)是合數(shù)的算法題暴力算法,本文包含運(yùn)算結(jié)果和實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-09-09Mybatis-plus實(shí)現(xiàn)主鍵自增和自動(dòng)注入時(shí)間的示例代碼
這篇文章主要介紹了Mybatis-plus實(shí)現(xiàn)主鍵自增和自動(dòng)注入時(shí)間的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Javaweb項(xiàng)目session超時(shí)解決方案
這篇文章主要介紹了Javaweb項(xiàng)目session超時(shí)解決方案,關(guān)于解決方案分類比較明確,內(nèi)容詳細(xì),需要的朋友可以參考下。2017-09-09spring?java?動(dòng)態(tài)獲取consul?K/V的方法
這篇文章主要介紹了spring?java?動(dòng)態(tài)獲取consul?K/V的相關(guān)資料,主要包括springConsul配置kv路徑以及自動(dòng)注入consulKV到服務(wù)中,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10Spring配置shiro時(shí)自定義Realm中屬性無法使用注解注入的解決辦法
今天小編就為大家分享一篇關(guān)于Spring配置shiro時(shí)自定義Realm中屬性無法使用注解注入的解決辦法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03