在我的 Spring Web 应用程序中,我需要向非 RESTful API 发出 HTTP 请求,并将响应正文解析为字符串(它是一维 CSV 列表)。
我以前用过RestTemplate
,但这不是 RESTful 并且不能很好地映射到类。每当我“手动”实现这样的东西(例如使用HttpClient
)时,我总会在以后发现 Spring 有一个实用程序类,它使事情变得更简单。
春天有什么东西可以“开箱即用”完成这项工作吗?
在我的 Spring Web 应用程序中,我需要向非 RESTful API 发出 HTTP 请求,并将响应正文解析为字符串(它是一维 CSV 列表)。
我以前用过RestTemplate
,但这不是 RESTful 并且不能很好地映射到类。每当我“手动”实现这样的东西(例如使用HttpClient
)时,我总会在以后发现 Spring 有一个实用程序类,它使事情变得更简单。
春天有什么东西可以“开箱即用”完成这项工作吗?
如果您查看 RestTemplate 的来源,您会发现它在内部使用
java.net.URL
和
url.openConnection()
这是 Java 中进行 HTTP 调用的标准方式,因此您可以安全地使用它。如果春天会有一个“HTTP 客户端”实用程序,那么 RestTemplate 也会使用它。
我在内部使用带有 Spring 4.3 Core 的 Spring Boot,并找到了一种非常简单的方法来使用 OkHttpClient 发出 Http 请求和读取响应。这是代码
Request request = new Request.Builder().method("PUT", "some your request body")
.url(YOUR_URL)
.build();
OkHttpClient httpClient = new OkHttpClient();
try
{
Response response = httpClient.newBuilder()
.readTimeout(1, TimeUnit.SECONDS)
.build()
.newCall(request)
.execute();
if(response.isSuccessful())
{
// notification about succesful request
}
else
{
// notification about failure request
}
}
catch (IOException e1)
{
// notification about other problems
}