web-dev-qa-db-ja.com

org.jboss.resteasy.client.ClientRequestの代わりに何を使用しますか?

org.jboss.resteasy.client.ClientRequestは非推奨であり、RESTEasyクライアントの使用方法についてGoogleで見つけたすべてのものを無効にすることがわかりました。 Javadoc は、代わりに何を使用するかを示しません。 Googleも同様に沈黙しています。

私は今のところ2.3.5に戻しましたが、とにかく答えに興味があるでしょう。また、知っている誰かに尋ねずに答えを見つけることになっている方法に興味があります。見た?

28
Torque

3.0ベータ版のドキュメント here は、これらの廃止予定を次のように説明しています。

Resteasy手動クライアントAPI、インターセプター、StringConverters、StringParamterConverters、および非同期HTTP APIはすべて非推奨となっており、今後のリリースで削除される可能性があります。これらのそれぞれに対応するJAX-RS 2.0が存在するようになりました。

これは、推奨される方法が this post で説明されているJAX-RSクライアントAPIを使用することであることを意味します

14
Doug Porter

http://example.org/pizza/{id}.jsonにJSON APIがあると仮定すると( 'id'はピザの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を使用する場合)、ドキュメントに記載されているように、特別なハンドラーを登録する必要がある場合があることに注意してください here

Update実際には、次の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ライセンスを使用します。

6
Andy MacKinlay

RESTEasyドキュメント は、クライアント接続を閉じる必要があると言っています。これは、例ではclient.close()です。しかし、私が見つけることができるすべての例はこれを行いません。ガベージコレクション中にクライアント接続は自動的に閉じられますか?

1
guyr