gpt4 book ai didi

java - RestTemplate:exchange() vs postForEntity() vs execute()

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:43:16 29 4
gpt4 key购买 nike

我正在使用 Spring boot 开发 Rest API,我必须访问应用程序的端点。我为此使用了 RestTemplate。我能够使用 2 种方法做到这一点,

  • postForEntity():

    responseEntity = 
    restTemplate.postForEntity(uri, httpEntity, ResponseClass.class);
  • exchange():

    responseEntity = 
    restTemplate.exchange(uri, HttpMethod.POST, httpEntity, ResponseClass.class);

我想知道这两种方法的用法和区别。

我还看到了另一种方法 execute()。请说明一下。如何以及何时使用它。

最佳答案

RestTemplate 是一个非常通用的对象。

让我们从execute开始,因为它是最通用的方法:

execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback,
@Nullable ResponseExtractor<T> responseExtractor, Object... uriVariables)

请注意 uriVariables 也可以作为 Map 传递。

execute 旨在适用于尽可能多的场景:

  • 第一个和第二个参数允许 URL 和方法的任何有效组合。
  • 可以通过传递自定义 RequestCallback(一个只有一个方法的 @FunctionalInterface doWithRequest(ClientHttpRequest request)) 在发送之前。
  • 可以通过传递自定义 ResponseExtractor 以任何必要的方式反序列化从远程资源返回的响应。

将此与 exchange 进行比较:

exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity,
Class<T> responseType, Object... uriVariables)

这里有两个主要区别:

  • 您现在可以直接传递 HttpEntity,而之前需要使用 RequestCallback 手动设置。
  • 反序列化机制是通过传递所需的响应类型 Class 开箱即用的。

如您所见,这对于日常使用来说更加方便。

getForEntitypostForEntity 这样的方法甚至更短、更容易理解:

getForEntity(String url, Class<T> responseType, Object... uriVariables)

postForEntity(String url, @Nullable Object request, Class<T> responseType,
Object... uriVariables)

注意 postForEntity 现在允许您直接 POST 任何 Object 而无需包装器。使用这些代替 execute 没有性能优势或损害,因为它们在后台调用 execute - 这只是一个方便的问题。

关于java - RestTemplate:exchange() vs postForEntity() vs execute(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52364187/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com