springboot学习18

Spring 应用程序可以通过以下方式使用 REST API:
一、RestTemplate
由 Spring 核心框架提供、简单、同步 REST 客户端。
RestTemplate 定义操作:

方法 描述
delete(…) 对指定 URL 上的资源执行 HTTP DELETE请求
exchange(…) 对 URL 执行指定的 HTTP 方法,返回一个 ResponseEntity,其中包含从响应体映射的对象
execute(…) 对 URL 执行指定的 HTTP 方法,返回一个映射到响应体的对象
getForEntity(…) 发送 HTTP GET 请求,返回一个 ResponseEntity,其中包含从响应体映射的对象
getForObject(…) 发送 HTTP GET 请求,返回一个映射到响应体的对象
headForHeaders(…) 发送 HTTP HEAD 请求,返回指定资源 URL 的 HTTP 请求头
optionsForAllow(…) 发送 HTTP OPTIONS 请求,返回指定 URL 的 Allow 头信息
patchForObject(…) 发送 HTTP PATCH 请求,返回从响应主体映射的结果对象
postForEntity(…) 将数据 POST 到一个 URL,返回一个 ResponseEntity,其中包含从响应体映射而来的对象
postForLocation(…) 将数据 POST 到一个 URL,返回新创建资源的 URL
postForObject(…) 将数据 POST 到一个 URL,返回从响应主体映射的对象
put(…) 将资源数据 PUT 到指定的URL

使用 RestTemplate,需要创建一个实例:

RestTemplate rest = new RestTemplate();

或者bean方式注入:

@Bean
public RestTemplate restTemplate() {
    
    
    return new RestTemplate();
}

1、请求 GET 资源
使用 getForObject() 来获取 User:
1)

public User getUserById(String userId) {
    
    
    return rest.getForObject("http://localhost:8080/users/{id}",
                             User.class, userId);
}

2)使用映射来指定 URL 变量:

public User getUserById(String userId) {
    
    
    Map<String, String> urlVariables = new HashMap<>();
    urlVariables.put("id", userId);
    return rest.getForObject("http://localhost:8080/users/{id}",
                            User.class, urlVariables);
}

3)使用 URI 参数:

public User getUserById(String userId) {
    
    
    Map<String,String> urlVariables = new HashMap<>();
    urlVariables.put("id", userId);
    URI url = UriComponentsBuilder
        .fromHttpUrl("http://localhost:8080/users/{id}")
        .build(urlVariables);
    return rest.getForObject(url, User.class);
}

使用getForEntity() :

public User getUserById(String userId) {
    
    
    ResponseEntity<User> responseEntity =
        rest.getForEntity("http://localhost:8080/users/{id}",
                          User.class, userId);
    
    log.info("Fetched time: " +
             responseEntity.getHeaders().getDate());
    
    return responseEntity.getBody();
}

2、请求 PUT 资源

public void updateUser(User user) {
    
    
    rest.put("http://localhost:8080/users/{id}",
            user,
            user.getId());
}

3、请求 DELETE 资源
将 URL(指定为 String)和 URL 变量值赋给 delete(),如下:

public void deleteUser(User user) {
    
    
    rest.delete("http://localhost:8080/users/{id}",
               user.getId());
}

RestTemplate 方法一样,可以将 URL 指定为 URI 对象,或者将 URL 参数指定为 Map。

4、请求 POST 资源
在 POST 请求后收到新创建的User 资源:

public User createIngredient(User user) {
    
    
    return rest.postForObject("http://localhost:8080/users",
                             user,
                             User.class);
}

返回新创建的资源的位置如postForLocation():

public URI createUser(User user) {
    
    
    return rest.postForLocation("http://localhost:8080/users",
                                user);
}

返回位置和响应负载,postForEntity():

public User createUser(User user) {
    
    
    ResponseEntity<User> responseEntity =
        rest.postForEntity("http://localhost:8080/users",
                           user,
                           User.class);
    
    log.info("New resource created at " +
             responseEntity.getHeaders().getLocation());
    
    return responseEntity.getBody();
}

二、Traverson
感知超链接的同步 REST 客户端,由 Spring HATEOAS 提供。
实例化一个 Traverson 对象和一个 API 的基础 URI:

Traverson traverson = new Traverson(
    URI.create("http://localhost:8080/api"), MediaType.HAL_JSON);

三、WebClient
Spring 5 中引入的响应式、异步 REST 客户端。

猜你喜欢

转载自blog.csdn.net/tongwudi5093/article/details/113799714