28

我刚刚发现它org.jboss.resteasy.client.ClientRequest已被弃用,使我在 Google 上找到的关于如何使用RESTEasy客户端的所有内容都无效。Javadoc没有说明要改用什么。谷歌同样保持沉默。

我现在已经恢复2.3.5,但无论如何都会对答案感兴趣,以及一个人应该如何在不询问其他知道的人的情况下找到答案 - 有没有我可以查看的包含该信息的资源?

4

3 回答 3

14

此处的 3.0 beta 文档描述了这些弃用,如下所示:

Resteasy 手动客户端 API、拦截器、StringConverters、StringParamterConverters 和 Async HTTP API 都已被弃用,可能会在以后的版本中删除。现在,这些东西中的每一个都有一个 JAX-RS 2.0 等效项。

这意味着首选方法是使用本文中描述的 JAX-RS 客户端API

于 2013-01-23T04:28:44.213 回答
7

如果我们假设在http://example.org/pizza/{id}.json, 有一个 JSON API(其中 'id' 是一个披萨 ID),它会返回如下结果

{ 
  "name": "Hawaiian",
  "toppings": ["tomato", "ham", "cheese", "pineapple"]
}

Invocation.BuilderJavadocs的基础上,我们可以做这样的事情,

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);
       }
    }
}

(这也得到了这篇文章的帮助,尽管它使用了已弃用的 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.rsJAXRS 实现来自 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 许可证。

于 2013-10-02T00:59:22.913 回答
1

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

于 2014-05-28T00:55:38.823 回答