云计算百科
云计算领域专业知识百科平台

SpringBoot项目里面发起http请求的几种方法

在Spring Boot项目中发起HTTP请求的方法

在Spring Boot项目中,有几种常用的方式可以发起HTTP请求,以下是主要的几种方法:

1. 使用RestTemplate (Spring 5之前的主流方式)

// 需要先注入RestTemplate
@Autowired
private RestTemplate restTemplate;

public void makeRequest() {
// GET请求
ResponseEntity<String> response = restTemplate.getForEntity(
"https://api.example.com/data", String.class);

// POST请求
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> request = new HttpEntity<>("{\\"key\\":\\"value\\"}", headers);
ResponseEntity<String> response = restTemplate.postForEntity(
"https://api.example.com/data", request, String.class);
}

2. 使用WebClient (Spring 5+推荐的响应式方式)

// 需要添加spring-boot-starter-webflux依赖
WebClient webClient = WebClient.create();

// GET请求
Mono<String> response = webClient.get()
.uri("https://api.example.com/data")
.retrieve()
.bodyToMono(String.class);

// POST请求
Mono<String> response = webClient.post()
.uri("https://api.example.com/data")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue("{\\"key\\":\\"value\\"}")
.retrieve()
.bodyToMono(String.class);

3. 使用HttpClient (Java 11+内置)

HttpClient client = HttpClient.newHttpClient();

// GET请求
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data"))
.build();

// POST请求
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\\"key\\":\\"value\\"}"))
.build();

// 发送请求
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

4. 使用Feign Client (声明式REST客户端)

// 需要添加spring-cloud-starter-openfeign依赖
@FeignClient(name = "exampleClient", url = "https://api.example.com")
public interface ExampleClient {
@GetMapping("/data")
String getData();

@PostMapping("/data")
String postData(@RequestBody String body);
}

// 使用
@Autowired
private ExampleClient exampleClient;

public void makeRequest() {
String response = exampleClient.getData();
}

5. 使用第三方库如OkHttp或Apache HttpClient

OkHttp示例:

OkHttpClient client = new OkHttpClient();

// GET请求
Request request = new Request.Builder()
.url("https://api.example.com/data")
.build();

// POST请求
RequestBody body = RequestBody.create(
"{\\"key\\":\\"value\\"}", MediaType.parse("application/json"));
Request request = new Request.Builder()
.url("https://api.example.com/data")
.post(body)
.build();

// 发送请求
Response response = client.newCall(request).execute();

Apache HttpClient示例:

CloseableHttpClient httpClient = HttpClients.createDefault();

// GET请求
HttpGet httpGet = new HttpGet("https://api.example.com/data");

// POST请求
HttpPost httpPost = new HttpPost("https://api.example.com/data");
StringEntity entity = new StringEntity("{\\"key\\":\\"value\\"}");
httpPost.setEntity(entity);
httpPost.setHeader("Content-type", "application/json");

// 发送请求
CloseableHttpResponse response = httpClient.execute(httpPost);

选择建议

  • 对于新项目,推荐使用 WebClient (响应式) 或 HttpClient (Java内置)
  • 如果使用Spring Cloud,Feign Client 是一个很好的选择
  • RestTemplate 虽然仍可使用,但已进入维护模式,不推荐新项目使用
  • 需要更多控制时,可以考虑 OkHttp 或 Apache HttpClient
赞(0)
未经允许不得转载:网硕互联帮助中心 » SpringBoot项目里面发起http请求的几种方法
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!