服务器之家

服务器之家 > 正文

使用restTemplate远程调用controller路径取数据

时间:2021-11-25 13:18     来源/作者:renhuan28

 

restTemplate远程调controller路径取数据

Spring的RestTemplate提供了很多对HTTP method的支持,这里主要说常用的get和post。

使用环境为springboot

 

首先要写相关配置类,举例:

@Configuration
public class Config {
  @Autowired
  RestTemplateBuilder builder;
  @Bean
  public RestTemplate restTemplate() {
    return builder.build();
  }
}

 

然后调目标cotroller层,比如目标cotroller层为

@RestController
@RequestMapping("/aaa")
public class TemplateController {
  @PostMapping(value = "/ppp")
  public List<Students> getInfo(@RequestBody String sid) {
    ...
    return stuService.getId(areaId);
  }
}

 

需要用post的方法去调

  @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);
  }

 

再比如目标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的方法去调

 @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);   //主要这个方法
    if (students != null) {
      return students;
    }
    return new HashSet();
  }

 

通过Spring的RestTemplate进行跨模块调用

Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现对象与json的序列化和反序列化。首先在项目中新建controller方法

 

相关代码如图下所示:

使用restTemplate远程调用controller路径取数据

接着我们在另外一个项目中的启动类的位置注册一个RestTemplate实例

 

相关代码可参考图下所示:

使用restTemplate远程调用controller路径取数据

然后创建HttpTestController使用RestTemplate中最简单的一个功能getForEntity发起了一个get请求去调用前一个项目中服务端的数据并返回结果。

使用restTemplate远程调用controller路径取数据

最后访问http://localhost:8080/httpTestController/queryByname?name=张三就能看到list打印传递的值。需要注意的是图1是第一个项目请求的,图2是第二个项目通过跨服务跨项目请求得来的,它们两者的端口号是不一样的

 

运行结果如下所示:

使用restTemplate远程调用controller路径取数据

(图1)

使用restTemplate远程调用controller路径取数据

(图2)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/renhuan28/article/details/80512851

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部