web-dev-qa-db-fra.com

comment envoyer un objet json à partir de REST client utilisant javax.ws.rs.client.WebTarget

J'ai un POJO donné ci-dessous que je veux PUT sur le serveur en JSON ou XML.

C'est ce que j'ai fait

CLIENT:

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

Les exemples que j'ai trouvés sur le Web utilisaient WebResource.

Je ne sais pas comment utiliser WebTarget. Ce que j'ai fait est tiré d'un exemple trouvé sur SO mais Entity.entity () donne une erreur à l'entité de méthode non définie (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
                 + "]";
}

S'il vous plaît guider comment faire cela.

Merci

21
user3275095

Il existe deux versions principales de Jersey différentes, 1.x et 2.x. Vous semblez essayer d’utiliser une combinaison des deux, ce qui ne fonctionnera pas. Les versions 2.x n'ont pas certaines classes comme dans 1.x et vice versa.

Si vous voulez utiliser Jersey 2.x, vous devriez utiliser Response , plutôt que ClientResponse

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

Ventilation de base.

  • L'appel de request() sur WebTarget renvoie un Invocation.Buidler

    Invocation.Builder builder = target.request();
    
  • Une fois que nous appelons put , nous récupérons un Response

    Response response = builder.put(Entity.json(friend));
    
  • Pour extraire un type connu de la réponse, nous pourrions utiliser readEntity(Class type)

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