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;
}
}