java - 如何在ReSTLet Framework中设置ClientResource发送请求的超时时间

标签 java restlet clientresource

我使用 ReSTLet 框架,特别是类 ClientResource 通过它自己的 get()post()put()delete() 方法向服务器发送 HTTP 请求。由于有时服务器处于离线状态,因此无法访问,因此我想设置比默认值更小的超时。我该怎么做?

目前我已经尝试过这种方式但没有成功:

ClientResource cr = new ClientResource(uri);

Context context = new Context();
context.getParameters().add("maxIoIdleTimeMs", "0");
context.getParameters().add("ioMaxIdleTimeMs", "0");
context.getParameters().add("socketTimeout", "1000");

cr.setNext(new Client(context, Protocol.HTTP));
cr.setRetryOnError(false);

...

Representation r = cr.get();

结果与默认情况相同,即在 get() 方法返回连接错误异常之前超时约 60-90 秒。我的目的是预见到它。

最佳答案

正确设置超时:

Component c = new Component();
Client client = c.getClients().add(Protocol.HTTP);
client.getContext().getParameters().add ( "socketTimeout", "10" );
Response resp = client.handle(new Request(Method.GET, "https://swapi.co/api/people/1/"));
System.out.println("Output: " + resp.getEntity().getText());

此代码将根据您的需要抛出超时异常,将socketTimeout增加到至少1000以便能够检索测试API JSON响应。

此外,还使用了以下版本:

<dependency>
  <groupId>org.restlet.jse</groupId>
  <artifactId>org.restlet</artifactId>
  <version>2.4.0</version>
</dependency>
<dependency>
  <groupId>org.restlet.jse</groupId>
  <artifactId>org.restlet.ext.httpclient</artifactId>
  <version>2.4.0</version>
</dependency> 

关于java - 如何在ReSTLet Framework中设置ClientResource发送请求的超时时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58846937/

相关文章:

java - 如何使用 URL 参数使用 servlet ClientResource?

java - Keycloak:使用 Java API 客户端将客户端角色添加到服务帐户角色

java - 更新 JList 模型导致 StackOverflowError

java - ReSTLet - 将错误状态代码和异常跟踪从服务器传递到客户端

java - 用于调用 REST API 的 POST 请求的 JSON 输入

javascript - RESTLET - 客户端的 Angular.JS 文件上传

java - 如何使用 Rest Get Annotation for application/x-octet-stream Accept header

java - 将字符串编码为 UTF-8 和 7 位编码

java - 让 Hibernate 创建 TIMESTAMP 列

java - 为音乐播放器 Android 应用程序实现随机播放按钮