使用什么替代org.jboss.resteasy.client.ClientRequest?

28

我刚发现 org.jboss.resteasy.client.ClientRequest 被废弃了,这使我在 Google 上找到的有关如何使用 RESTEasy 客户端的所有信息无效了。 Javadoc 没有提供任何替代方案。Google 也一样没有相关信息。

我暂时回退到了 2.3.5,但我仍然对答案感兴趣,以及应该如何找到答案而不是询问其他人 - 是否有可以查看该信息的资源?


#easyPeezey。我会在您的评论中添加……例子很少包含导入语句(这让我发疯),groupId和artifactId也将非常感激。 - granadaCoder
3个回答

14

3.0 beta文档在此处描述了下面的过时内容:

Resteasy手动客户端API、拦截器、StringConverters、StringParamterConverters和Async HTTP API都已被弃用,并可能在以后的版本中删除。现在,每个事物都有一个JAX-RS 2.0的等效替代方法。

这意味着首选方法将是使用在这篇文章中描述的JAX-RS客户端API。


3
Invocation.Builder的Javadocs中还有一些有用的信息,它没有提到一个不存在的ClientFactory类,但如果RestEasy的作者能够从被弃用的类中添加一些指针就更好了。 - Andy MacKinlay

7
如果我们假设有一个JSON API位于http://example.org/pizza/{id}.json(其中'id'是pizza的ID),它返回如下结果:
{ 
  "name": "Hawaiian",
  "toppings": ["tomato", "ham", "cheese", "pineapple"]
}

Invocation.Builder Javadocs的基础上,我们可以像这样做:

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import org.glassfish.jersey.jackson.JacksonFeature;

public class PizzaClient {
    private Client client;

    public PizzaClient() {
         client = ClientBuilder.newClient();
         // enable POJO mapping using Jackson - see
         // https://jersey.java.net/documentation/latest/user-guide.html#json.jackson
         client.register(JacksonFeature.class); 
    }

    /** POJO which maps to JSON results using Jackson */
    public static class Pizza {
        private String name;
        private String[] toppings;

        public String getName() { return name; }
        public String[] getToppings() { return toppings ; }
    }

    public Pizza getPizzaById(String id) {
        String uri = String.format("http://example.org/pizza/%s.json", id)
        Invocation.Builder bldr = client.target(uri).request("application/json");
        return bldr.get(Pizza.class);
    }

    public static void main(String[] args) {
       PizzaClient pc = new PizzaClient();
       Pizza pizza = pc.getPizzaById("1");
       System.out.println(pizza.getName() + ":");
       for (String topping : pizza.getToppings()) {
            System.out.println("\t" + topping);
       }
    }
}

这也得益于this post的帮助,尽管它使用了已弃用的API。

还要注意,如果您想使用Jackson读取POJO(或者我认为是使用JAXB),您可能需要注册一个特殊处理程序,如此处所述。

更新 实际上,您只需要以下Maven依赖项:

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.3.1</version>
    </dependency>

如果您不使用RestEasy,那么javax.ws.rs JAXRS实现来自Jersey。

或者您可以选择使用JBoss:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson2-provider</artifactId>
        <version>3.0.4.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-client</artifactId>
        <version>3.0.4.Final</version>
    </dependency>

在这种情况下,您只需删除上面代码中的JacksonFeature行,代码将使用更自由的Apache许可证。

1

RESTEasy文档中提到我们应该关闭客户端连接;在你的例子中应该是client.close()。但我能找到的每个例子都没有这样做。客户端连接会在垃圾回收期间自动关闭吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接