如何使用Jersey 2.x设置连接和读取超时?

Dav*_*ang 48 java jersey

在球衣1中,我们在类中有一个函数setConnectTimeoutcom.sun.jersey.api.client.Client.

在球衣2中,javax.ws.rs.client.Client该类用于缺少此功能的地方.

如何在泽西2.x中设置连接超时和读取超时?

Lar*_*ars 64

以下代码适用于Jersey 2.3.1(灵感来自:https://stackoverflow.com/a/19541931/1617124)

public static void main(String[] args) {
    Client client = ClientBuilder.newClient();

    client.property(ClientProperties.CONNECT_TIMEOUT, 1000);
    client.property(ClientProperties.READ_TIMEOUT,    1000);

    WebTarget target = client.target("http://1.2.3.4:8080");

    try {
        String responseMsg = target.path("application.wadl").request().get(String.class);
        System.out.println("responseMsg: " + responseMsg);
    } catch (ProcessingException pe) {
        pe.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上它有效.构建器模式不会说应该创建另一个实例.只需看一下源代码,返回值就是实际的客户端(只是为了让我们更容易进行后续调用). (5认同)
  • 我怀疑这是否有效..property(...)返回客户端实例(构建器模式).调用.target()时,不会使用这些设置. (2认同)

Sig*_*gen 36

您还可以为每个请求指定超时:

public static void main(String[] args) {
    Client client = ClientBuilder.newClient();
    WebTarget target = client.target("http://1.2.3.4:8080");

    // default timeout value for all requests
    client.property(ClientProperties.CONNECT_TIMEOUT, 1000);
    client.property(ClientProperties.READ_TIMEOUT,    1000);

    try {
        Invocation.Builder request = target.request();

        // overriden timeout value for this request
        request.property(ClientProperties.CONNECT_TIMEOUT, 500);
        request.property(ClientProperties.READ_TIMEOUT, 500);

        String responseMsg = request.get(String.class);
        System.out.println("responseMsg: " + responseMsg);
    } catch (ProcessingException pe) {
        pe.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)