Jersey 2.25中Client.property()返回null问题求助
解决Jersey 2.25中Client设置超时返回null的问题
这个问题的核心是你搞混了ClientBuilder和Client两个类中property()方法的返回值设计:
ClientBuilder的property()方法是链式调用设计,调用后会返回ClientBuilder实例本身,支持连续调用;- 而
Client接口中的property()方法是void返回类型,它没有返回值,所以你把这个方法的结果赋值给client变量时,自然会得到null。
正确的解决方式
最稳妥的做法是在构建Client实例之前,通过ClientBuilder来设置这些超时属性,这样属性会被正确应用到后续创建的Client中:
ClientBuilder builder = ClientBuilder.newBuilder(); builder.sslContext(createSSLContext()) // 在Builder阶段设置超时属性,支持链式调用 .property("jersey.config.client.connectTimeout", 100) .property("jersey.config.client.readTimeout", 100); Client client = builder.build();
如果你确实需要在Client实例创建后设置属性(不推荐,因为部分属性在实例化后修改可能不生效),那么不要对client变量进行重新赋值,直接调用方法即可:
ClientBuilder builder = ClientBuilder.newBuilder(); builder.sslContext(createSSLContext()); Client client = builder.build(); // 直接调用property方法,不要赋值 client.property("jersey.config.client.connectTimeout", 100); client.property("jersey.config.client.readTimeout", 100);
额外提示
建议优先使用ClientBuilder阶段设置属性,因为Jersey的Client实例在构建完成后,部分配置是不可变的,后续修改可能不会生效。另外,你也可以使用更类型安全的配置方式,比如ClientProperties类中的常量来替代硬编码的字符串:
import org.glassfish.jersey.client.ClientProperties; // ... builder.property(ClientProperties.CONNECT_TIMEOUT, 100) .property(ClientProperties.READ_TIMEOUT, 100);
这样可以避免拼写错误,代码可读性也更好。
内容的提问来源于stack exchange,提问作者Rafael Dias da Silva
相关产品推荐
相关产品推荐

