SpringBoot|SpringBoot 如何使用RestTemplate来调用接口

目录

  • 使用RestTemplate来调用接口1.新建一个配置类,配置RestTemplate的Bean
    import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; /** * RestTemplate配置模板 * * @author like */@Configurationpublic class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory factory) {return new RestTemplate(factory); }@Beanpublic ClientHttpRequestFactory simpleClientHttpRequestFactory() {SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setReadTimeout(5000); //单位为msfactory.setConnectTimeout(5000); //单位为msreturn factory; } }

    注意点:如果在编译器中提示factory不能自动注入,那应该时跟其他类有冲突,有多个 ClientHttpRequestFactory
    把这个factory的名字改一下,改成其他的就好了,比如这里就直接改成 simpleClientHttpRequestFactory
    SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
    文章图片

    2.多种传输和接收参数的方式
    2.1postForObject方法
    postForObject指post请求,并返回一个Object对象。
    • 第1个参数:请求的url地址
    • 第2个参数:其实是HttpEntity,这个类主要有三种构造方法,如下
    new HttpEntity(请求体)
    new HttpEntity(请求头)
    new HttpEntity(请求体,请求头)
    • 第3个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
    • 第4个参数:参数值,这里有Map和 可变参数两种形式(通常用不到,数据通常放在Json里就全部传输过去了)
    SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
    文章图片

    2.1.1使用Json来传递和接收数据
    首先引入fastJson的pom配置
    com.alibabafastjson1.2.49

    在实现类中注入RestTemplate
    【SpringBoot|SpringBoot 如何使用RestTemplate来调用接口】SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
    文章图片

    接下来new一个 ExpressionDomain 对象,将这个对象转化成JSONObject。使用Json来传递数据
    public void postByDefault(){ExpressionDomain expressionDomain=new ExpressionDomain("hello","hasaki","win"); JSONObject jsonObj = (JSONObject) JSONObject.toJSON(expressionDomain); //设置请求头HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Accept", MediaType.APPLICATION_JSON.toString()); //请求体HttpEntity formEntity = new HttpEntity(jsonObj.toString(), headers); //发起请求String jsonResult = restTemplate.postForObject("http://localhost:8081/findDataByReflection" , formEntity, String.class); //将Json字符串解析成对象Response resp = JSON.parseObject(jsonResult, new TypeReference() {}); }

    接收端
    用@RequestBody注解一个参数,用于自动解析Json为对象。返回的Response也是一个对象,添加@ResponseBody注解,将返回Json字符串。解析的时候将Json字符串解析成对象即可。
    SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
    文章图片

    postForEntity
    和getForEntity原理是一样的,下面会讲到。
    2.2getForObject方法
    getForObject指get请求,并返回一个Object对象。这里有3种方法。
    • 第1个参数:请求的url地址
    • 第2个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
    • 第3个参数:参数值,这里有Map和 可变参数两种形式
    SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
    文章图片
    2.2.1
    通过Map传参数的方式 可以使用map来封装请求参数,并作为getForObject的第三个参数,同时修改url如下,map中的"1"会替换url中的{1},"2"会替换url中的{2}
    Map map = new HashMap(); map.put("1", "hello"); map.put("2", "world"); String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class,map);

    接口端:
    @RequestMapping(value = "https://www.it610.com/getIds", method = RequestMethod.GET)public @ResponseBody String getIds(String param1, String param2) {return param1 + param2; }

    2.2.2 通过可变参数的方式
    也可以直接将要传递的值放到getForObject方法的参数结尾,数量不限,它会按顺序替换{1}和{2}。接口端代码还是和2.2.1的一样
    String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class, "hello", "world");

    2.3getForEntity方法
    getForEntity和getForObject的用法是一样的,只是其返回结果是一个ResponseEntity,其中包含了更多的响应信息,比如:
    ResponseEntity response = restTemplate.getForEntity("http://localhost:8081/getIds",String.class); response.getHeaders(); //响应头response.getStatusCode(); //响应码response.getBody(); //响应体,即前面的result

    RestTemplate调用接口总结
    • 1.新建一个配置类,配置RestTemplate的Bean
      import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; /** * RestTemplate配置模板 * * @author like */@Configurationpublic class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory factory) {return new RestTemplate(factory); }@Beanpublic ClientHttpRequestFactory simpleClientHttpRequestFactory() {SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setReadTimeout(5000); //单位为msfactory.setConnectTimeout(5000); //单位为msreturn factory; } }

      注意点:如果在编译器中提示factory不能自动注入,那应该时跟其他类有冲突,有多个 ClientHttpRequestFactory
      把这个factory的名字改一下,改成其他的就好了,比如这里就直接改成 simpleClientHttpRequestFactory
      SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
      文章图片

      2.多种传输和接收参数的方式
      2.1postForObject方法
      postForObject指post请求,并返回一个Object对象。
      • 第1个参数:请求的url地址
      • 第2个参数:其实是HttpEntity,这个类主要有三种构造方法,如下
      new HttpEntity(请求体)
      new HttpEntity(请求头)
      new HttpEntity(请求体,请求头)
      • 第3个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
      • 第4个参数:参数值,这里有Map和 可变参数两种形式(通常用不到,数据通常放在Json里就全部传输过去了)
      SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
      文章图片

      2.1.1使用Json来传递和接收数据
      首先引入fastJson的pom配置
      com.alibabafastjson1.2.49

      在实现类中注入RestTemplate
      SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
      文章图片

      接下来new一个 ExpressionDomain 对象,将这个对象转化成JSONObject。使用Json来传递数据
      public void postByDefault(){ExpressionDomain expressionDomain=new ExpressionDomain("hello","hasaki","win"); JSONObject jsonObj = (JSONObject) JSONObject.toJSON(expressionDomain); //设置请求头HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Accept", MediaType.APPLICATION_JSON.toString()); //请求体HttpEntity formEntity = new HttpEntity(jsonObj.toString(), headers); //发起请求String jsonResult = restTemplate.postForObject("http://localhost:8081/findDataByReflection" , formEntity, String.class); //将Json字符串解析成对象Response resp = JSON.parseObject(jsonResult, new TypeReference() {}); }

      接收端
      用@RequestBody注解一个参数,用于自动解析Json为对象。返回的Response也是一个对象,添加@ResponseBody注解,将返回Json字符串。解析的时候将Json字符串解析成对象即可。
      SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
      文章图片

      postForEntity
      和getForEntity原理是一样的,下面会讲到。
      2.2getForObject方法
      getForObject指get请求,并返回一个Object对象。这里有3种方法。
      • 第1个参数:请求的url地址
      • 第2个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
      • 第3个参数:参数值,这里有Map和 可变参数两种形式
      SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
      文章图片
      2.2.1
      通过Map传参数的方式 可以使用map来封装请求参数,并作为getForObject的第三个参数,同时修改url如下,map中的"1"会替换url中的{1},"2"会替换url中的{2}
      Map map = new HashMap(); map.put("1", "hello"); map.put("2", "world"); String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class,map);

      接口端:
      @RequestMapping(value = "https://www.it610.com/getIds", method = RequestMethod.GET)public @ResponseBody String getIds(String param1, String param2) {return param1 + param2; }

      2.2.2 通过可变参数的方式
      也可以直接将要传递的值放到getForObject方法的参数结尾,数量不限,它会按顺序替换{1}和{2}。接口端代码还是和2.2.1的一样
      String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class, "hello", "world");

      2.3getForEntity方法
      getForEntity和getForObject的用法是一样的,只是其返回结果是一个ResponseEntity,其中包含了更多的响应信息,比如:
      ResponseEntity response = restTemplate.getForEntity("http://localhost:8081/getIds",String.class); response.getHeaders(); //响应头response.getStatusCode(); //响应码response.getBody(); //响应体,即前面的result

      RestTemplate调用接口总结1.这是接口信息
      @PostMapping("/testm")public ReturnResult show11(@RequestParam("id") String id,@RequestParam("name") String name) {System.out.println(id); UserInfo userInfo = userInfoMapper.selectByUserName(name); return ReturnResult.create(userInfo); }

      这是restTemplate调用
      //Post,@RequestParam---postForEntity@Testpublic void sho11() {String url = "http://127.0.0.1:8099/user/testm"; MultiValueMap request = new LinkedMultiValueMap<>(); request.add("id", "12324"); request.add("name", "nanc"); ResponseEntity resp = restTemplate.postForEntity(url, request, ReturnResult.class); ReturnResult body = resp.getBody(); UserInfo data = https://www.it610.com/article/body.getData(); System.err.println(data.getUserId()); System.out.println(data); }

      2.接口

使用RestTemplate来调用接口
1.新建一个配置类,配置RestTemplate的Bean
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; /** * RestTemplate配置模板 * * @author like */@Configurationpublic class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory factory) {return new RestTemplate(factory); }@Beanpublic ClientHttpRequestFactory simpleClientHttpRequestFactory() {SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setReadTimeout(5000); //单位为msfactory.setConnectTimeout(5000); //单位为msreturn factory; } }

注意点:如果在编译器中提示factory不能自动注入,那应该时跟其他类有冲突,有多个 ClientHttpRequestFactory
把这个factory的名字改一下,改成其他的就好了,比如这里就直接改成 simpleClientHttpRequestFactory
SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
文章图片

2.多种传输和接收参数的方式
2.1postForObject方法
postForObject指post请求,并返回一个Object对象。
  • 第1个参数:请求的url地址
  • 第2个参数:其实是HttpEntity,这个类主要有三种构造方法,如下
new HttpEntity(请求体)
new HttpEntity(请求头)
new HttpEntity(请求体,请求头)
  • 第3个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
  • 第4个参数:参数值,这里有Map和 可变参数两种形式(通常用不到,数据通常放在Json里就全部传输过去了)
SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
文章图片

2.1.1使用Json来传递和接收数据
首先引入fastJson的pom配置
com.alibabafastjson1.2.49

在实现类中注入RestTemplate
SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
文章图片

接下来new一个 ExpressionDomain 对象,将这个对象转化成JSONObject。使用Json来传递数据
public void postByDefault(){ExpressionDomain expressionDomain=new ExpressionDomain("hello","hasaki","win"); JSONObject jsonObj = (JSONObject) JSONObject.toJSON(expressionDomain); //设置请求头HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); headers.add("Accept", MediaType.APPLICATION_JSON.toString()); //请求体HttpEntity formEntity = new HttpEntity(jsonObj.toString(), headers); //发起请求String jsonResult = restTemplate.postForObject("http://localhost:8081/findDataByReflection" , formEntity, String.class); //将Json字符串解析成对象Response resp = JSON.parseObject(jsonResult, new TypeReference() {}); }

接收端
用@RequestBody注解一个参数,用于自动解析Json为对象。返回的Response也是一个对象,添加@ResponseBody注解,将返回Json字符串。解析的时候将Json字符串解析成对象即可。
SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
文章图片

postForEntity
和getForEntity原理是一样的,下面会讲到。
2.2getForObject方法
getForObject指get请求,并返回一个Object对象。这里有3种方法。
  • 第1个参数:请求的url地址
  • 第2个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
  • 第3个参数:参数值,这里有Map和 可变参数两种形式
SpringBoot|SpringBoot 如何使用RestTemplate来调用接口
文章图片
2.2.1
通过Map传参数的方式 可以使用map来封装请求参数,并作为getForObject的第三个参数,同时修改url如下,map中的"1"会替换url中的{1},"2"会替换url中的{2}
Map map = new HashMap(); map.put("1", "hello"); map.put("2", "world"); String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class,map);

接口端:
@RequestMapping(value = "https://www.it610.com/getIds", method = RequestMethod.GET)public @ResponseBody String getIds(String param1, String param2) {return param1 + param2; }

2.2.2 通过可变参数的方式
也可以直接将要传递的值放到getForObject方法的参数结尾,数量不限,它会按顺序替换{1}和{2}。接口端代码还是和2.2.1的一样
String result = restTemplate.getForObject("http://localhost:8081/getIds?param1={1}¶m2={2}", String.class, "hello", "world");

2.3getForEntity方法
getForEntity和getForObject的用法是一样的,只是其返回结果是一个ResponseEntity,其中包含了更多的响应信息,比如:
ResponseEntity response = restTemplate.getForEntity("http://localhost:8081/getIds",String.class); response.getHeaders(); //响应头response.getStatusCode(); //响应码response.getBody(); //响应体,即前面的result

RestTemplate调用接口总结 1.这是接口信息
@PostMapping("/testm")public ReturnResult show11(@RequestParam("id") String id,@RequestParam("name") String name) {System.out.println(id); UserInfo userInfo = userInfoMapper.selectByUserName(name); return ReturnResult.create(userInfo); }

这是restTemplate调用
//Post,@RequestParam---postForEntity@Testpublic void sho11() {String url = "http://127.0.0.1:8099/user/testm"; MultiValueMap request = new LinkedMultiValueMap<>(); request.add("id", "12324"); request.add("name", "nanc"); ResponseEntity resp = restTemplate.postForEntity(url, request, ReturnResult.class); ReturnResult body = resp.getBody(); UserInfo data = https://www.it610.com/article/body.getData(); System.err.println(data.getUserId()); System.out.println(data); }

2.接口
@GetMapping("/testp")public ReturnResult show22(@RequestParam String name,@RequestParam Integer age,@RequestParam String clazz) {System.out.println(name + "-" + age + "-" + clazz); UserInfo userInfo = userInfoMapper.selectByUserName(name); return ReturnResult.create(userInfo); }

resttemplate
//Get ,@RequestParam-----getForObject@Testpublic void sho12() {String url = "http://127.0.0.1:8099/rest/testp?name={name}&age={age}&clazz={clazz}"; Map map = new HashMap<>(); map.put("name", "nanc"); map.put("age", 34); map.put("clazz", "12"); ReturnResult forObject = restTemplate.getForObject(url, ReturnResult.class, map); UserInfo data = https://www.it610.com/article/forObject.getData(); System.out.println(data); }

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

    推荐阅读