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

目录
  • restTemplate远程调controller路径取数据
    • 首先要写相关配置类,举例:
    • 然后调目标cotroller层,比如目标cotroller层为
    • 需要用post的方法去调
    • 再比如目标controller层为
    • 需要用get的方法去调
  • 通过Spring的RestTemplate进行跨模块调用
    • 相关代码如图下所示:
    • 相关代码可参考图下所示:
    • 运行结果如下所示:

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实例

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

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

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

运行结果如下所示:

(图1)

(图2)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 基于RestTemplate的使用方法(详解)

    1.postForObject :传入一个业务对象,返回是一个String 调用方: BaseUser baseUser=new BaseUser(); baseUser.setUserid(userid); baseUser.setPass(pass); String postForObject = restTemplate.postForObject(this.getURL()+"/user/login", baseUser, String.class); return postF

  • 详解RestTemplate的三种使用方式

     什么是RestTemplate 传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient.不过此种方法使用起来太过繁琐.spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate. 准备 服务端我是用的是一个普通的API @RestController public class ServerController { @GetMapping("/msg") public String msg(){ return "th

  • springMVC中RestTemplate传值接值方法

    我们需要给接口推送数据以及接口接收数据的时候,可以用springmvc中的一种简单方法 1.需要在spring-mvc.xml中配置信息转化器. <bean id = "stringHttpMessageConverter" class = "org.springframework.http.converter.StringHttpMessageConverter"/> <bean id="jsonHttpMessageConverter

  • Spring远程调用HttpClient/RestTemplate的方法

    一.HttpClient 两个系统间如何互相访问?两个tomcat上的项目如何互相访问? 采用HttpClient实现跨系统的接口调用. 介绍: 官网:http://hc.apache.org/index.html 现在也叫:HttpComponents HttpClient可以发送get.post.put.delete....等请求 使用: 导入坐标 <dependency> <groupId>org.apache.httpcomponents</groupId> &

  • Spring cloud restTemplate 传递复杂参数的方式(多个对象)

    使用微服务的时候往往服务之间调用比较麻烦,spring cloud提供了Feign接口调用,RestTemplate调用的方式 这里我探讨下RestTemplate调用的方式: 服务A:接收三个对象参数  这三个参数的是通过数据库查询出来的 服务B:要调用服务A 服务B提供了查询三个参数的方法,后面要使用三个参数 对于服务A,处理的方式有两中 1. 服务B提供一个Feign接口将查询三个参数的方法公开,服务A直接引用Feign来查询参数,服务B只需要将三个查询关键字传递过去即可 服务A acti

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

    目录 restTemplate远程调controller路径取数据 首先要写相关配置类,举例: 然后调目标cotroller层,比如目标cotroller层为 需要用post的方法去调 再比如目标controller层为 需要用get的方法去调 通过Spring的RestTemplate进行跨模块调用 相关代码如图下所示: 相关代码可参考图下所示: 运行结果如下所示: restTemplate远程调controller路径取数据 Spring的RestTemplate提供了很多对HTTP met

  • 使用Feign远程调用时,序列化对象失败的解决

    Feign远程调用序列化对象失败 最近在搭建一个SpringCloud的微服务时,遇到了一个问题,在使用Feign远程调用时报错,返回对象没有无参构造方法,有其他的含参数的构造方法. 本地自己搭建的微服务目录大概如下,才刚开始,后续会逐渐补充优化迭代,有兴趣的可以fork下地址: https://github.com/zhanghailang123/MyCloud 给与指导意见. Eureka:注册中心服务端,采用Eureka注册中心 EurekaClientA:其中的一个Eureka服务端,命

  • AngularJS控制器controller给模型数据赋初始值的方法

    本文实例讲述了AngularJS控制器controller给模型数据赋初始值的方法.分享给大家供大家参考,具体如下: 之前的文章<AngularJS入门示例之Hello World详解>,很简单的就实现了模型数据和页面显示的自动绑定.现在我们使用控制器,给模型赋初始值.如果使用jQuery来实现变量赋初值,需要在页面加载完成后执行 $("#target").attr("value",selfValue); 使用AngularJS代码如下: <!do

  • SpringMVC中controller接收json数据的方法

    本文实例为大家分享了SpringMVC中controller接收json数据的方法,供大家参考,具体内容如下 1.jsp页面发送ajax的post请求: function postJson(){ var json = {"username" : "imp", "password" : "123456"}; $.ajax({ type : "post", url : "<%=basePath

  • SpringMVC中controller返回json数据的方法

    本文实例为大家分享了SpringMVC中controller返回json数据的2种方法,供大家参考,具体内容如下 1.jsp的ajax请求: function getJson(){ $.ajax({ type:"get", dataType:"json", url:"<%=basePath %>getJson", success:function(data){ for(var i=0;i<jsonData.length;i++)

  • Node在Controller层进行数据校验的过程详解

    前言 幽默风趣的后端程序员一般自嘲为 CURD Boy.CURD, 也就是对某一存储资源的增删改查,这完全是面向数据编程啊. 真好呀,面向数据编程,往往会对业务理解地更加透彻,从而写出更高质量的代码,造出更少的 BUG.既然是面向数据编程那更需要避免脏数据的出现,加强数据校验.否则,难道要相信前端的数据校验吗,毕竟前端数据校验直达用户,是为了 UI 层更友好的用户反馈. 数据校验层 后端由于重业务逻辑以及待处理各种数据,以致于分成各种各样的层级,以我经历过的后端项目就有分为 Controller

  • springMVC如何将controller中Model数据传递到jsp页面

    在action中存放数据,代码如下: @Controller // 加入到IOC容器 //@RequestMapping(value="/topic") public class TopicAction { @Resource(name = "topicServiceImpl") private TopicService topicService; /** * 首页显示 */ @RequestMapping(value="/index") pub

  • 利用ASP从远程服务器上接收XML数据的方法

    复制代码 代码如下: <%  dim objXML  dim objRootElement  dim strValue  dim strInetURL  dim strXML  dim item              strInetURL ="http://pf.inetsolution.com/inetactive2001/inetactive2001news.xml"  Dim HttpReq   set HttpReq = server.CreateObject(&qu

  • .Net MVC将Controller数据传递到View

    一.通过ViewData传值 MVC从开始版本就一直支持使用ViewData将Controller里面的数据传递到View.ViewData定义如下: 从上面的截图中可以看出,ViewData里面存的是字典类型的数据,在查看ViewDataDictionary的定义: 注意:ViewDataDictionary继承自IDictionary等接口,所以ViewData里面的Value值类型是object的,使用的时候需要进行类型转换. Controller代码如下: using MVCPassVa

随机推荐