改用什么org.jboss.resteasy.client.ClientRequest的?(What

2019-08-07 19:06发布

我刚刚发现org.jboss.resteasy.client.ClientRequest已过时,无效的一切,我能找到的关于谷歌如何使用RESTEasy客户端。 在Javadoc中没有给出指示,以什么来代替使用。 谷歌同样是沉默。

我已经恢复到2.3.5现在,但有兴趣的答案不管怎么说,以及如何一个应该找出答案不问别人谁知道-有与信息资源在那里我可以看?

Answer 1:

3.0测试文档这里介绍,像这样这些弃用:

RestEasy的手动客户端API,拦截器,StringConverters,StringParamterConverters和异步HTTP的API都被弃用,将在以后的版本可能已经删除。 现在有一个JAX-RS 2.0相当于每个这些事情。

这将意味着,优选的方法将是使用在所描述的JAX-RS客户端API 此篇



Answer 2:

如果我们假设有在JSON API http://example.org/pizza/{id}.json ,(其中,“ID”是比萨饼ID),它返回的结果,例如

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

建立在Invocation.Builder的Javadoc ,我们可以做这样的事情,

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)。

也请注意,您可能需要注册一个特殊的处理,如果你想用杰克逊阅读的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执行来自新泽西州)

或者您也可以与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许可证。



Answer 3:

该的RESTEasy文档说我们应该关闭客户端连接; 将被client.close()在你的榜样。 但是,每一个例子,我可以找到并没有这样做。 将客户端连接得到垃圾收集过程中会自动关闭?



文章来源: What to use instead of org.jboss.resteasy.client.ClientRequest?