Spring HTTP客户端

mar*_*cks 47 java spring

我是Spring的新手,我需要我的Java应用程序通过HTTP连接到另一个API(JSON,RESTful).Spring Framework是否有类似JSON HTTP Rest Client的东西?Spring开发人员通常使用什么?

mar*_*cks 45

我通过以下方式实现了我所需要的:

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

public class RestClient {

  private String server = "http://localhost:3000";
  private RestTemplate rest;
  private HttpHeaders headers;
  private HttpStatus status;

  public RestClient() {
    this.rest = new RestTemplate();
    this.headers = new HttpHeaders();
    headers.add("Content-Type", "application/json");
    headers.add("Accept", "*/*");
  }

  public String get(String uri) {
    HttpEntity<String> requestEntity = new HttpEntity<String>("", headers);
    ResponseEntity<String> responseEntity = rest.exchange(server + uri, HttpMethod.GET, requestEntity, String.class);
    this.setStatus(responseEntity.getStatusCode());
    return responseEntity.getBody();
  }

  public String post(String uri, String json) {   
    HttpEntity<String> requestEntity = new HttpEntity<String>(json, headers);
    ResponseEntity<String> responseEntity = rest.exchange(server + uri, HttpMethod.POST, requestEntity, String.class);
    this.setStatus(responseEntity.getStatusCode());
    return responseEntity.getBody();
  }

  public void put(String uri, String json) {
    HttpEntity<String> requestEntity = new HttpEntity<String>(json, headers);
    ResponseEntity<String> responseEntity = rest.exchange(server + uri, HttpMethod.PUT, requestEntity, null);
    this.setStatus(responseEntity.getStatusCode());   
  }

  public void delete(String uri) {
    HttpEntity<String> requestEntity = new HttpEntity<String>("", headers);
    ResponseEntity<String> responseEntity = rest.exchange(server + uri, HttpMethod.DELETE, requestEntity, null);
    this.setStatus(responseEntity.getStatusCode());
  }

  public HttpStatus getStatus() {
    return status;
  }

  public void setStatus(HttpStatus status) {
    this.status = status;
  } 
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,这很好,不是吗?;-)做得好 (2认同)

Ang*_*ity 16

最简单的是使用RestTemplate,查看官方Spring博客上的这篇文章:

RestTemplate是客户端HTTP访问的中心Spring类.

这是一个GET的例子:

String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, "42", "21");
Run Code Online (Sandbox Code Playgroud)

  • 为了跟上时代的步伐,Spring 现在有了 WebFlux 项目的另一个替代方案:[WebFlux 中的 WebClient](https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive)。 html#webflux-client)。根据[文档](https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#rest-client-access),RestTemplate 将在未来版本中被弃用并且不会有新的主要功能。 (3认同)