栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot发送GET/POST请求——RestTemplate的基本使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot发送GET/POST请求——RestTemplate的基本使用

RestTemplate的基本使用——发送GET/POST请求
    • 1. RestTemplateConfig配置类
    • 2. RestTemplateTest测试类
    • 3. 发送GET请求
    • 4. 发送POST请求
    • 5. POST发送文件

一般我们的Spring Boot工程都是被请求的一方,但某些情况下我们也需要调用别人的接口以实现逻辑,传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐,而Spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate。

RestTemplate是Spring用于同步client端的核心类,简化了与http服务的通信,并满足RestFul原则,程序代码可以给它提供URL,并提取结果。默认情况下,RestTemplate默认依赖jdk的HTTP连接工具。当然你也可以 通过setRequestFactory属性切换到不同的HTTP源,比如Apache HttpComponents、Netty和OkHttp。
Spring启动器中内置了RestTemplate,无需引入其他依赖,只需要spring-boot-starter-web即可。

        
            org.springframework.boot
            spring-boot-starter-web
        
1. RestTemplateConfig配置类
@Configuration
public class ResTemplateConfig {
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
        return new RestTemplate(factory);
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        //超时设置
        factory.setReadTimeout(5000);//ms
        factory.setConnectTimeout(15000);//ms
        return factory;
    }
}
2. RestTemplateTest测试类

将RestTemplate对象注入

@RunWith(SpringRunner.class)
@SpringBootTest
public class RestTemplateTest {
    @Autowired
	private RestTemplate restTemplate;
}
3. 发送GET请求
@Test
public void RestTemplateTestGet() {
    
    String url = "http://localhost:5000/users/1";
    
    //1. getForObject()
    //先获取返回的字符串,若想获取属性,可以使用gson转化为实体后get方法获取
    String result = restTemplate.getForObject(url, String.class);
    System.out.println(result);//{"code":"0","data":{"address":"北京市海淀区","id":1,"password":"123456","role":0,"sex":0,"telephone":"10086","username":"小明"},"msg":"操作成功"}

    //2. getForEntity()
    //获取实体ResponseEntity,可以用get函数获取相关信息
    ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class);
    System.out.println("responseEntity.getStatusCode() = " + responseEntity.getStatusCode());

    System.out.println("responseEntity.getStatusCodevalue() = " + responseEntity.getStatusCodevalue()); //responseEntity.getStatusCodevalue() = 200

    System.out.println("responseEntity.getBody() = " + responseEntity.getBody());   //responseEntity.getBody() = {"code":"0","data":{"address":"北京市海淀区","id":1,"password":"123456","role":0,"sex":0,"telephone":"10086","username":"小明"},"msg":"操作成功"}

    System.out.println("responseEntity.getHeaders() = " + responseEntity.getHeaders());//responseEntity.getHeaders() = [Content-Type:"application/json", Content-Length:"158", Server:"Werkzeug/0.14.1 Python/3.7.0", Date:"Sat, 16 Oct 2021 06:01:26 GMT"]

    System.out.println("responseEntity.getClass() = " + responseEntity.getClass());//responseEntity.getClass() = class org.springframework.http.ResponseEntity
    
}
4. 发送POST请求
@Test
public void RestTemplateTestPost() {
    //String url = "http://127.0.0.1:5000/register";
    String url = "http://127.0.0.1:5000/login";

    //linkedMultiValueMap一个键对应多个值,对应format-data的传入类型
    linkedMultiValueMap request = new linkedMultiValueMap<>();
    //入参
    request.set("username","baihui");
    request.set("password", "123456");
    request.set("sex", "0");
    request.set("telephone", "13172724946");
    //请求
    String result = restTemplate.postForObject(url,request,String.class);
    System.out.println(result);

    ResponseEntity responseEntity = restTemplate.postForEntity(url, request, String.class);
    System.out.println("responseEntity.getBody() = " + responseEntity.getBody());
}
5. POST发送文件
@Test
public void RestTemplateTestUpload() throws IOException {
    String httpMethod = "http://127.0.0.1:5555/photo";
    String args = "可以添加其他属性参数";

    MultiValueMap paramMap = new linkedMultiValueMap<>();
    paramMap.add("args", args);

    //打开图片并写入流
    File file=new File("D:\WorkProject\static\output\04.png");
    byte[] bytesArray = new byte[(int) file.length()];

    FileInputStream fis = new FileInputStream(file);
    fis.read(bytesArray); //read file into bytes[]
    fis.close();

    ByteArrayResource contentsAsResource = new ByteArrayResource(bytesArray) {
        //重载设置文件名
        @Override
        public String getFilename() {
            return "04.png";
        }
    };
    paramMap.add("file", contentsAsResource);
    String result = restTemplate.postForObject(httpMethod,paramMap,String.class);
    System.out.println("result = " + result);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号