服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringBoot 如何使用RestTemplate来调用接口

SpringBoot 如何使用RestTemplate来调用接口

2022-02-26 00:33奚学长又装死 Java教程

这篇文章主要介绍了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 {     @Bean    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {        return new RestTemplate(factory);    }     @Bean    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();        factory.setReadTimeout(5000);//单位为ms        factory.setConnectTimeout(5000);//单位为ms        return factory;    } }

注意点:如果在编译器中提示factory不能自动注入,那应该时跟其他类有冲突,有多个 ClientHttpRequestFactory

把这个factory的名字改一下,改成其他的就好了,比如这里就直接改成 simpleClientHttpRequestFactory

SpringBoot 如何使用RestTemplate来调用接口

2.多种传输和接收参数的方式

2.1postForObject方法

postForObject指post请求,并返回一个Object对象。

new HttpEntity(请求体)

new HttpEntity(请求头)

new HttpEntity(请求体,请求头)

SpringBoot 如何使用RestTemplate来调用接口

2.1.1使用Json来传递和接收数据

首先引入fastJson的pom配置

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->		<dependency>			<groupId>com.alibaba</groupId>			<artifactId>fastjson</artifactId>			<version>1.2.49</version>		</dependency>

在实现类中注入RestTemplate

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<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);        //发起请求    String jsonResult = restTemplate.postForObject("http://localhost:8081/findDataByReflection" , formEntity, String.class);        //将Json字符串解析成对象    Response resp = JSON.parseObject(jsonResult, new TypeReference<Response>() {});}

接收端

用@RequestBody注解一个参数,用于自动解析Json为对象。返回的Response也是一个对象,添加@ResponseBody注解,将返回Json字符串。解析的时候将Json字符串解析成对象即可。

SpringBoot 如何使用RestTemplate来调用接口

postForEntity

和getForEntity原理是一样的,下面会讲到。

2.2getForObject方法

getForObject指get请求,并返回一个Object对象。这里有3种方法。

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}&param2={2}", String.class,map);

接口端:

@RequestMapping(value = "/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}&param2={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个参数:请求的url地址
  • 第2个参数:其实是HttpEntity,这个类主要有三种构造方法,如下
  • 第3个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
  • 第4个参数:参数值,这里有Map和 可变参数两种形式(通常用不到,数据通常放在Json里就全部传输过去了)
  • 第1个参数:请求的url地址
  • 第2个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
  • 第3个参数:参数值,这里有Map和 可变参数两种形式
  • 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 {     @Bean    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {        return new RestTemplate(factory);    }     @Bean    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();        factory.setReadTimeout(5000);//单位为ms        factory.setConnectTimeout(5000);//单位为ms        return factory;    } }

    注意点:如果在编译器中提示factory不能自动注入,那应该时跟其他类有冲突,有多个 ClientHttpRequestFactory

    把这个factory的名字改一下,改成其他的就好了,比如这里就直接改成 simpleClientHttpRequestFactory

    SpringBoot 如何使用RestTemplate来调用接口

    2.多种传输和接收参数的方式

    2.1postForObject方法

    postForObject指post请求,并返回一个Object对象。

    new HttpEntity(请求体)

    new HttpEntity(请求头)

    new HttpEntity(请求体,请求头)

    SpringBoot 如何使用RestTemplate来调用接口

    2.1.1使用Json来传递和接收数据

    首先引入fastJson的pom配置

    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->		<dependency>			<groupId>com.alibaba</groupId>			<artifactId>fastjson</artifactId>			<version>1.2.49</version>		</dependency>

    在实现类中注入RestTemplate

    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<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);        //发起请求    String jsonResult = restTemplate.postForObject("http://localhost:8081/findDataByReflection" , formEntity, String.class);        //将Json字符串解析成对象    Response resp = JSON.parseObject(jsonResult, new TypeReference<Response>() {});}

    接收端

    @RequestBody注解一个参数,用于自动解析Json为对象。返回的Response也是一个对象,添加@ResponseBody注解,将返回Json字符串。解析的时候将Json字符串解析成对象即可。

    SpringBoot 如何使用RestTemplate来调用接口

    postForEntity

    和getForEntity原理是一样的,下面会讲到。

    2.2getForObject方法

    getForObject指get请求,并返回一个Object对象。这里有3种方法。

    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}&param2={2}", String.class,map);

    接口端:

    @RequestMapping(value = "/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}&param2={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    @Test    public void sho11() {        String url = "http://127.0.0.1:8099/user/testm";        MultiValueMap<String, String> request = new LinkedMultiValueMap<>();        request.add("id", "12324");        request.add("name", "nanc");         ResponseEntity<ReturnResult> resp = restTemplate.postForEntity(url, request, ReturnResult.class);        ReturnResult body = resp.getBody();        UserInfo data = body.getData();        System.err.println(data.getUserId());        System.out.println(data);      }

    2.接口

    • 第1个参数:请求的url地址
    • 第2个参数:其实是HttpEntity,这个类主要有三种构造方法,如下
    • 第3个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
    • 第4个参数:参数值,这里有Map和 可变参数两种形式(通常用不到,数据通常放在Json里就全部传输过去了)
    • 第1个参数:请求的url地址
    • 第2个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
    • 第3个参数:参数值,这里有Map和 可变参数两种形式

 

使用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 {     @Bean    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {        return new RestTemplate(factory);    }     @Bean    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();        factory.setReadTimeout(5000);//单位为ms        factory.setConnectTimeout(5000);//单位为ms        return factory;    } }

注意点:如果在编译器中提示factory不能自动注入,那应该时跟其他类有冲突,有多个 ClientHttpRequestFactory

把这个factory的名字改一下,改成其他的就好了,比如这里就直接改成 simpleClientHttpRequestFactory

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 如何使用RestTemplate来调用接口

2.1.1使用Json来传递和接收数据

首先引入fastJson的pom配置

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->		<dependency>			<groupId>com.alibaba</groupId>			<artifactId>fastjson</artifactId>			<version>1.2.49</version>		</dependency>

在实现类中注入RestTemplate

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<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);        //发起请求    String jsonResult = restTemplate.postForObject("http://localhost:8081/findDataByReflection" , formEntity, String.class);        //将Json字符串解析成对象    Response resp = JSON.parseObject(jsonResult, new TypeReference<Response>() {});}

接收端

@RequestBody注解一个参数,用于自动解析Json为对象。返回的Response也是一个对象,添加@ResponseBody注解,将返回Json字符串。解析的时候将Json字符串解析成对象即可。

SpringBoot 如何使用RestTemplate来调用接口

postForEntity

和getForEntity原理是一样的,下面会讲到。

2.2getForObject方法

getForObject指get请求,并返回一个Object对象。这里有3种方法。

  • 第1个参数:请求的url地址
  • 第2个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。
  • 第3个参数:参数值,这里有Map和 可变参数两种形式

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}&param2={2}", String.class,map);

接口端:

@RequestMapping(value = "/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}&param2={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    @Test    public void sho11() {        String url = "http://127.0.0.1:8099/user/testm";        MultiValueMap<String, String> request = new LinkedMultiValueMap<>();        request.add("id", "12324");        request.add("name", "nanc");         ResponseEntity<ReturnResult> resp = restTemplate.postForEntity(url, request, ReturnResult.class);        ReturnResult body = resp.getBody();        UserInfo data = 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    @Test    public void sho12() {        String url = "http://127.0.0.1:8099/rest/testp?name={name}&age={age}&clazz={clazz}";        Map<String, Object> 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 = forObject.getData();        System.out.println(data);    } 

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

原文链接:https://blog.csdn.net/likekobe2012/article/details/82663725

延伸 · 阅读

精彩推荐
  • Java教程CentOS 7系统下配置自定义JDK的教程

    CentOS 7系统下配置自定义JDK的教程

    这篇文章主要给大家介绍了在CentOS 7系统下配置自定义JDK的教程,文中将配置的方法教程介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们...

    Java教程网4182020-11-20
  • Java教程利用java反射机制实现自动调用类的简单方法

    利用java反射机制实现自动调用类的简单方法

    下面小编就为大家带来一篇利用java反射机制实现自动调用类的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看...

    jingxian2362020-06-04
  • Java教程Spring Cloud原理详解

    Spring Cloud原理详解

    今天小编就为大家分享一篇关于Spring Cloud原理详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    邋遢的流浪剑客11702021-07-15
  • Java教程四种引用类型在JAVA Springboot中的使用详解

    四种引用类型在JAVA Springboot中的使用详解

    这篇文章主要介绍了springboot的四种引用类型,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参...

    Java4ye10872021-12-18
  • Java教程简述Java编程语言中的逃逸分析

    简述Java编程语言中的逃逸分析

    这篇文章主要介绍了简述Java编程语言中的逃逸分析,包括其定义、作用、类型及理论基础等相关内容,十分具有参考价值,需要的朋友可以了解下。...

    wmingstar9182020-12-31
  • Java教程java格式化数字操作 NumberFormat及DecimalFormat

    java格式化数字操作 NumberFormat及DecimalFormat

    这篇文章主要介绍了java格式化数字操作 NumberFormat及DecimalFormat,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    知我饭否10032022-02-15
  • Java教程Java实现的串口通信功能示例

    Java实现的串口通信功能示例

    这篇文章主要介绍了Java实现的串口通信功能,结合实例形式分析了java串口通信的具体操作步骤与相关注意事项,需要的朋友可以参考下...

    逐兔郎6722021-03-23
  • Java教程Java GZip 基于内存实现压缩和解压的方法

    Java GZip 基于内存实现压缩和解压的方法

    这篇文章主要介绍了Java GZip 基于内存实现压缩和解压的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以...

    超哥说码5532020-08-24