web-dev-qa-db-ja.com

javax.ws.rs.client.WebTargetを使用してjsonオブジェクトをRESTクライアントから送信する方法

JSONまたはXMLとしてサーバーにPUTするPOJOを以下に示します。

これは私がやったことです

クライアント:

ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target(getBaseURI());

public void putFriend(String uri , Friend friend)
{
    System.out.println(friend.toString());

    target = target.path(some_path).path(uri);
    ClientResponse response =        target.request(MediaType.APPLICATION_JSON).put(Entity.entity(friend,MediaType.APPLICATION_JSON),ClientResponse.class);
}

Webで見つけた例はWebResourceを使用していました。

WebTargetの使用方法がわかりません。私がやったことは、SOで見つかったいくつかの例からですが、Entity.entity()はエラーundefined method entity(friend、String)を与えます。

[〜#〜] pojo [〜#〜]

@XmlRootElement
public class Friend{

    private String friendURI;
    private String event;
    private String uri;

    String getUri() {
        return uri;
    }
    void setUri(String uri) {
        this.uri = uri;
    }
    String getFriendURI() {
        return friendURI;
    }
    void setFriendURI(String friendURI) {
        this.friendURI = friendURI;
    }
    String getEvent() {
        return event;
    }
    void setEvent(String event) {
        this.event = event;
    }
public String toString() {
        return "Friend [friendURI=" + friendURI + ", uri=" + uri + ", event=" + event
                 + "]";
}

これを行う方法をご案内ください。

ありがとう

21
user3275095

Jerseyには2つのメジャーバージョン、1.xと2.xがあります。両方を組み合わせて使用​​しようとしているようですが、動作しません。 2.xバージョンには、1.xのように一部のクラスがありません。

Jersey 2.xを使用する場合は、Responseではなく ClientResponse を使用する必要があります。

_Response response = target.request().put(Entity.json(friend));
                                        // .json == automatic 'application/json'
_

基本的な内訳。

  • WebTargetrequest()を呼び出すと、 _Invocation.Buidler_ が返されます

    _Invocation.Builder builder = target.request();
    _
  • put を呼び出すと、Responseが返されます

    _Response response = builder.put(Entity.json(friend));
    _
  • 応答から既知のタイプを抽出するには、readEntity(Class type)を使用できます

    _String responseString = response.readEntity(String.class);
    response.close();
    _
46
Paul Samsotha