RestTemplate调用API的常用写法

Java教程 2025-10-07

摘要

本文介绍了RestTemplate调用http的几种写法,包括post+get,及传递参数的方式,让我们拿下它。

可选配置

依赖坐标pom.xml

<dependency>
    <groupId>org.apache.httpcomponentsgroupId>
    <artifactId>httpclientartifactId>
    <version>4.5.14version>
dependency>


自定义配置

package org.coffeebeans.resttemplate;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;

/**
 * 
  • ClassName: RestTemplateConfig
  •  *
  • Author: OakWang
  •  */ @Configuration publicclassRestTemplateConfig {     @Bean     public RestTemplate restTemplate() {         HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();         factory.setConnectTimeout(30000); // 连接超时时间(毫秒)         factory.setReadTimeout(30000); // 读取超时时间(毫秒)         RestTemplate restTemplate = new RestTemplate(factory);         MappingJackson2HttpMessageConverterjsonConverter = new MappingJackson2HttpMessageConverter();         restTemplate.getMessageConverters().add(jsonConverter);// 添加JSON消息转换器         return restTemplate;     } }

    实现get请求

    • GET+空参
    String requestUrl = "https://jsonplaceholder.typicode.com/posts/1";
    ResponseEntity response = restTemplate.getForEntity(requestUrl, String.class);
    if (Objects.equals(HttpStatus.OK, response.getStatusCode())) {
        log.info("请求响应结果: {}, {}", requestUrl, response.getBody());
        // 解析...
    }
    
    • GET+单参
    String requestUrl = "https://jsonplaceholder.typicode.com/posts/{id}";
    ResponseEntity<String> response = restTemplate.getForEntity(requestUrl, String.class1); // 参数值为 1
    if (Objects.equals(HttpStatus.OK, response.getStatusCode())) {
        log.info("请求响应结果: {}, {}", requestUrl, response.getBody());
        // 解析...
    }
    
    • GET+多参-方式1
    String requestUrl = "https://jsonplaceholder.typicode.com/comments?id={id}&email={email}";
    Map<String, Object> params = new HashMap<>();
    params.put("id"1);
    params.put("email""Eliseo@gardner.biz");
    ResponseEntity<String> response = restTemplate.getForEntity(requestUrl, String.class, params);
    if (Objects.equals(HttpStatus.OK, response.getStatusCode())) {
        log.info("请求响应结果: {}, {}", requestUrl, response.getBody());
        // 解析...
    }
    
    • GET+多参-方式2
    String requestUrl = UriComponentsBuilder.fromHttpUrl("https://jsonplaceholder.typicode.com/posts/1/comments")
            .queryParam("id""3")
            .queryParam("email""Nikita@garfield.biz")
            .toUriString();
    ResponseEntity<String> response = restTemplate.getForEntity(requestUrl, String.class);
    if (Objects.equals(HttpStatus.OK, response.getStatusCode())) {
        log.info("请求响应结果: {}, {}", requestUrl, response.getBody());
        // 解析...
    }
    

    实现post请求

    • POST+空参
    String requestUrl = "https://jsonplaceholder.typicode.com/posts";
    ResponseEntity response = restTemplate.postForEntity(requestUrl, null, Object.class);
    if (Objects.equals(HttpStatus.CREATED, response.getStatusCode())) {
        log.info("请求响应结果: {}, {}", requestUrl, response.getBody());
        // 解析...
    }
    
    
    • POST+JSON 实体对象参数
    String requestUrl="https://jsonplaceholder.typicode.com/posts";
    
    List entityList = new ArrayList<>(); //对象参数
    entityList.add(MyEntity.builder().title("foo").body("bar").userId("1").build());
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("Authorization", "");
    HttpEntity requestEntity = new HttpEntity<>(entityList, headers);
    
    ResponseEntity response = restTemplate.postForEntity(requestUrl, requestEntity, Object.class);
    if (Objects.equals(HttpStatus.CREATED, response.getStatusCode())) {
        log.info("请求响应结果: {}, {}", requestUrl, response.getBody());
        // 解析...
    }
    
    
    • POST+JSON 对象参数
    String requestUrl="https://jsonplaceholder.typicode.com/posts";
    
    Map params = new HashMap<>();
    params.put("title", "foo");
    params.put("body", "bar");
    params.put("userId", "1");
    MultiValueMap form = new LinkedMultiValueMap<>();
    for (Map.Entry entry : params.entrySet()) {
        form.add(entry.getKey(), entry.getValue());
    }
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    
    HttpEntity> requestEntity = new HttpEntity<>(form, headers);
    ResponseEntity response = restTemplate.postForEntity(requestUrl, requestEntity, Object.class);
    if (Objects.equals(HttpStatus.CREATED, response.getStatusCode())) {
        log.info("请求响应结果: {}, {}", requestUrl, response.getBody());
        // 解析...
    }
    
    
    • POST+表单提交
    String requestUrl="https://";
    // 1. 初始化参数
    Map<String, String> params = new HashMap<>();
    params.put("title""foo");
    // 2. 构造 MultiValueMap
    MultiValueMap<String, String> form = new LinkedMultiValueMap<>();
    for (Map.Entry<String, String> entry : params.entrySet()) {
        form.add(entry.getKey(), entry.getValue());
    }
    // 3. 设置请求头
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    // 4. 发送请求 返回Object或者指定类型
    HttpEntityString, String>> requestEntity = new HttpEntity<>(form, headers);
    ResponseEntity<Object> response = restTemplate.postForEntity(requestUrl, requestEntity, Object.class);
    //5.处理结果
    if (Objects.equals(HttpStatus.OK, response.getStatusCode())) {
        log.info("请求响应结果: {}, {}", requestUrl, response.getBody());
        // 解析...
    }
    

    总结

    以上我们整理了RestTemplate调用接口的几种用法,包括post+get,空参、单参、多参的使用场景。

    关注公众号:咖啡Beans

    在这里,我们专注于软件技术的交流与成长,分享开发心得与笔记,涵盖编程、AI、资讯、面试等多个领域。无论是前沿科技的探索,还是实用技巧的总结,我们都致力于为大家呈现有价值的内容。期待与你共同进步,开启技术之旅。