在我的 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
}