RestTemplate 简单应用

 post 请求

RestTemplate restTemplate = new RestTemplate();
// 请求地址
String url = "http://localhost/auth/oauth/token?grant_type={grant_type}&scope={scope}&username={username}&password={password}";
// 请求头参数
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("TenantId", "0");
httpHeaders.add("Authorization", "Basic cGNfdXNlcm5hbWVfYWRtaW46cGNfdXNlcm5hbWVfYWRtaW4=");
HttpEntity<Object> objectHttpEntity = new HttpEntity<>(httpHeaders);
// url encode 参数
Map<String, String> params = new HashMap<>();
params.put("grant_type", "password");
params.put("scope", "server");
params.put("username", "username_0");
params.put("password", "password_0");
// 响应体
ResponseEntity<ApiResp> mapResponseEntity = restTemplate.postForEntity(url,objectHttpEntity, ApiResp.class, params);
System.out.println(mapResponseEntity.getBody());

get 请求

RestTemplate restTemplate = new RestTemplate();
// 请求地址
String url = "http://localhost:9090/user/info?name={name}";
// 请求体封装
HttpHeaders httpHeaders = new HttpHeaders();// 请求头
httpHeaders.set("Authorization", "bearer " + token);
HttpEntity<Object> httpEntity = new HttpEntity<>(httpHeaders);
RequestCallback requestCallback = restTemplate.httpEntityCallback(httpEntity, Map.class);
// 响应提取器
ResponseExtractor<ResponseEntity<Map>> responseExtractor = restTemplate.responseEntityExtractor(Map.class);
// 查询参数
HashMap<String, String> params = new HashMap<>();
params.put("name", "张三");
// 执行
ResponseEntity<Map> execute = restTemplate.execute(url, HttpMethod.GET, requestCallback, responseExtractor, params);
System.out.println(execute.getBody());
package com.msxf.demo.template;

import cn.hutool.core.io.IoUtil;
import cn.hutool.json.JSONObject;
import com.msxf.demo.DemoApplicationTest;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RequestCallback;
import org.springframework.web.client.ResponseExtractor;
import org.springframework.web.client.RestTemplate;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;

/**
 * RestTemplate 测试
 * url 参数占位符 /url?name={name}&age={age}
 *
 * @author: zuoqiang.Huang
 * @date: 2022/4/18 10:14
 */
@Slf4j
public class RestTemplateTest extends DemoApplicationTest {

    @Test
    public void get() {

        RestTemplate restTemplate = new RestTemplate();

        // 请求地址
        String requestUrl = "http://localhost:8080/test?name={name}&age={age}";

        // 请求头参数
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.set("Authorization", "Basic cGNfdXNlcm5hbWVfYWRtaW46cGNfdXNlcm5hbWVfYWRtaW4=");
        requestHeaders.set("TENANT-ID", "1");

        // 请求地址参数
        Map<String, Object> requestUrlParams = new HashMap<>();
        requestUrlParams.put("name", "张三");
        requestUrlParams.put("age", "20");

        // 请求体封装
        HttpEntity<Object> requestEntity = new HttpEntity<>(requestHeaders);

        // 请求回调
        RequestCallback requestCallback = restTemplate.httpEntityCallback(requestEntity);

        // 第三方返回结果提取
        ResponseExtractor<ResponseEntity<String>> responseExtractor = restTemplate.responseEntityExtractor(String.class);

        // 执行
        ResponseEntity<String> response = restTemplate.execute(requestUrl, HttpMethod.GET, requestCallback, responseExtractor, requestUrlParams);

        Optional.ofNullable(response).map(ResponseEntity::getBody).ifPresent(log::info);

    }

    @Test
    public void post() {
        RestTemplate restTemplate = new RestTemplate();

        // 请求地址
        String requestUrl = "http://localhost:8080/test?name={name}&age={age}";

        // 请求头参数
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.set("Authorization", "Basic cGNfdXNlcm5hbWVfYWRtaW46cGNfdXNlcm5hbWVfYWRtaW4=");
        requestHeaders.set("TENANT-ID", "1");

        // 请求参数
        Map<String, Object> requestUrlParams = new HashMap<>();
        requestUrlParams.put("name", "王五");
        requestUrlParams.put("age", "24");

        // 请求体
        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("name", "李四");
        requestBody.put("age", "22");

        // 请求体封装
        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, requestHeaders);

        // 请求回调
        RequestCallback requestCallback = restTemplate.httpEntityCallback(requestEntity);

        // 第三方返回结果提取
        ResponseExtractor<ResponseEntity<String>> responseExtractor = restTemplate.responseEntityExtractor(String.class);

        // 执行
        ResponseEntity<String> response = restTemplate.execute(requestUrl, HttpMethod.POST, requestCallback, responseExtractor, requestUrlParams);

        Optional.ofNullable(response).map(ResponseEntity::getBody).ifPresent(log::info);

    }

    @Test
    public void mapPost() {
        RestTemplate restTemplate = new RestTemplate();

        // 请求地址
        String requestUrl = "http://localhost:8080/test/mapPost?name={name}&age={age}";

        // 请求头参数
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.set("Authorization", "Basic cGNfdXNlcm5hbWVfYWRtaW46cGNfdXNlcm5hbWVfYWRtaW4=");
        requestHeaders.set("TENANT-ID", "1");

        // 请求参数
        Map<String, Object> requestUrlParams = new HashMap<>();
        requestUrlParams.put("name", "王五");
        requestUrlParams.put("age", "24");

        // 请求体
        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("name", "李四");
        requestBody.put("age", "22");

        // 请求体封装
        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, requestHeaders);

        // 请求回调
        RequestCallback requestCallback = restTemplate.httpEntityCallback(requestEntity);

        // 第三方接口返回结果提取
        ResponseExtractor<ResponseEntity<Map>> responseExtractor = restTemplate.responseEntityExtractor(Map.class);

        // 执行
        ResponseEntity<Map> response = restTemplate.execute(requestUrl, HttpMethod.POST, requestCallback, responseExtractor, requestUrlParams);

        Optional.ofNullable(response).map(ResponseEntity::getBody).map(Objects::toString).ifPresent(log::info);

    }

    @Test
    public void postFile() {
        try {

            RestTemplate restTemplate = new RestTemplate();

            // 请求地址
            String url = "http://localhost:8080/test/postFile?name={name}&age={age}";

            // 请求参数
            Map<String, Object> requestUrlParams = new HashMap<>();
            requestUrlParams.put("name", "王五");
            requestUrlParams.put("age", "24");

            // 请求头
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.set("form-in", "Y");
            httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

            // 请求体
            InputStream inputStream = getClass().getClassLoader().getResourceAsStream("application.yml");
            File applicationYml = File.createTempFile("application-", ".yml");
            FileOutputStream fileOutputStream = new FileOutputStream(applicationYml);
            IoUtil.copy(inputStream, fileOutputStream);
            // 不能直接使用File上传、需要转换成FileSystemResource
            FileSystemResource fileSystemResource = new FileSystemResource(applicationYml);
            MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
            multiValueMap.add("file1", fileSystemResource);
            multiValueMap.add("file2", fileSystemResource);
            multiValueMap.add("gender", "男");

            // 封装请求体
            HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(multiValueMap, httpHeaders);

            // 请求回调
            RequestCallback requestCallback = restTemplate.httpEntityCallback(httpEntity);

            // 结果解析
//            ResponseExtractor<ResponseEntity<Map>> responseExtractor = restTemplate.responseEntityExtractor(Map.class);
//            ResponseExtractor<ResponseEntity<FileResponse>> responseExtractor = restTemplate.responseEntityExtractor(FileResponse.class);
//            ResponseExtractor<ResponseEntity<String>> responseExtractor = restTemplate.responseEntityExtractor(String.class);
            ResponseExtractor<ResponseEntity<JSONObject>> responseExtractor = restTemplate.responseEntityExtractor(JSONObject.class);

            ResponseEntity<JSONObject> execute = restTemplate.execute(url, HttpMethod.POST, requestCallback, responseExtractor, requestUrlParams);

            log.info(execute.getBody().toString());

            // 删除临时文件
            if (applicationYml.exists()) {
                applicationYml.delete();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @Test
    public void postFiles() {
        try {

            RestTemplate restTemplate = new RestTemplate();

            // 请求地址
            String url = "http://localhost:8080/test/postFiles?name={name}&age={age}";

            // 请求参数
            Map<String, Object> requestUrlParams = new HashMap<>();
            requestUrlParams.put("name", "王五");
            requestUrlParams.put("age", "24");

            // 请求头
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.set("form-in", "Y");
            httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

            // 请求体
            InputStream inputStream = getClass().getClassLoader().getResourceAsStream("application.yml");
            File applicationYml = File.createTempFile("application-", ".yml");
            FileOutputStream fileOutputStream = new FileOutputStream(applicationYml);
            IoUtil.copy(inputStream, fileOutputStream);
            // 不能直接使用File上传、需要转换成FileSystemResource
            FileSystemResource fileSystemResource = new FileSystemResource(applicationYml);
            MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
            // 多个文件 直接使用add
            multiValueMap.add("files", fileSystemResource);
            multiValueMap.add("files", fileSystemResource);
            multiValueMap.add("files", fileSystemResource);
            multiValueMap.add("gender", "男");

            // 封装请求体
            HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(multiValueMap, httpHeaders);

            // 请求回调
            RequestCallback requestCallback = restTemplate.httpEntityCallback(httpEntity);

            // 结果解析
            ResponseExtractor<ResponseEntity<JSONObject>> responseExtractor = restTemplate.responseEntityExtractor(JSONObject.class);

            ResponseEntity<JSONObject> execute = restTemplate.execute(url, HttpMethod.POST, requestCallback, responseExtractor, requestUrlParams);

            log.info(execute.getBody().toString());

            // 删除临时文件
            if (applicationYml.exists()) {
                applicationYml.delete();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @Data
    public static class FileResponse {
        private String fileName;
        private Integer size;
    }
}
package com.msxf.demo.controller;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@ToString
@RestController
@RequestMapping("/test")
public class TestController {

    @Setter
    @Getter
    @Value("${test.age:13}")
    private Integer age;

    @GetMapping
    public String get(@RequestBody Map<String, Object> body,
                      @RequestParam Map<String, Object> params,
                      @RequestHeader Map<String, Object> headers) {
        log.info(params.toString());
        log.info(headers.toString());
        return "get";
    }

    @PostMapping
    public String post(@RequestBody Map<String, Object> body,
                       @RequestParam Map<String, Object> params,
                       @RequestHeader Map<String, Object> headers) {
        log.info(body.toString());
        log.info(params.toString());
        log.info(headers.toString());
        return "post";
    }

    @PostMapping("/mapPost")
    public Map<String, Object> mapPost(@RequestBody Map<String, Object> body,
                                       @RequestParam Map<String, Object> params,
                                       @RequestHeader Map<String, Object> headers) {
        log.info(body.toString());
        log.info(params.toString());
        log.info(headers.toString());
        Map<String, Object> result = new HashMap<>();
        result.put("requestMethod", "mapPost");
        return result;
    }

    /**
     * 同时上传多个文件
     *
     * @param file1   文件1
     * @param file2   文件2
     * @param params  查询参数列表
     * @param headers 请求头
     * @return map
     */
    @PostMapping("/postFile")
    public Map<String, Object> postFile(@RequestPart("file1") MultipartFile file1,
                                        @RequestPart MultipartFile file2,
                                        @RequestParam Map<String, Object> params,
//                                        @RequestBody Map<String, Object> body, // 同时存在@RequestPart 无法绑定错误
                                        @RequestHeader Map<String, Object> headers) {

        log.info(params.toString());
//        log.info(body.toString());
        log.info(headers.toString());

        log.info(file1.getOriginalFilename());
        log.info(String.valueOf(file1.getSize()));
        log.info(file2.getOriginalFilename());
        log.info(String.valueOf(file2.getSize()));
        Map<String, Object> result = new HashMap<>();
        result.put("fileName", file1.getOriginalFilename());
        result.put("size", file1.getSize());
        return result;
    }

    @PostMapping("/postFiles")
    public Map<String, Object> postFiles(@RequestPart List<MultipartFile> files,
//                                         @RequestPart MultipartFile[] files, // 使用数组和集合都可以接受数据
                                         @RequestParam Map<String, Object> params,
//                                        @RequestBody Map<String, Object> body, // 同时存在@RequestPart 无法绑定错误
                                         @RequestHeader Map<String, Object> headers) {

//        log.info(String.valueOf(files.length));
        log.info(String.valueOf(files.size()));

//        List<MultipartFile> multipartFiles = Arrays.asList(files);
        files.forEach(file -> {
            log.info(file.getOriginalFilename());
            log.info(String.valueOf(file.getSize()));
        });

        log.info(params.toString());
//        log.info(body.toString());
        log.info(headers.toString());

        Map<String, Object> result = new HashMap<>();
        result.put("size", files.size());
        return result;
    }

}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要配置RestTemplate,您需要完成以下步骤: 1. 添加Maven依赖项: 在您的项目的pom.xml文件中,添加以下依赖项: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> ``` 2. 创建RestTemplate Bean: 在您的配置类或应用程序主类中,使用`@Bean`注解创建一个RestTemplate bean。例如: ```java import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @Configuration public class AppConfig { @Bean public RestTemplate restTemplate() { return new RestTemplate(); } } ``` 3. 使用RestTemplate: 现在您可以在任何需要发送HTTP请求的地方使用RestTemplate了。例如,您可以使用`getForObject()`方法发送GET请求并获取响应。以下是一个简单的示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; @Component public class MyApiClient { private final RestTemplate restTemplate; @Autowired public MyApiClient(RestTemplate restTemplate) { this.restTemplate = restTemplate; } public void makeApiCall() { String url = "https://api.example.com/data"; ResponseEntity<String> response = restTemplate.getForEntity(url, String.class); // 处理响应 } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值