2014-11-30 24 views
15

Mam podanego POJO, które chcę PUT do serwera jako JSON lub XML.Jak wysłać obiekt Json z klienta REST za pomocą javax.ws.rs.client.WebTarget

To co mam zrobić

klient:

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

Przykłady znalazłem na internecie stosował WebResource.

Nie wiem, jak to zrobić, używając WebTarget. To, co zrobiłem, jest wzięte z jakiegoś przykładu znalezionego na SO, ale Entity.entity() podaje błąd niezdefiniowanej encji metody (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 
       + "]"; 
} 

proszę kierować, jak to zrobić.

Dzięki

Odpowiedz

36

Istnieją dwa różne Jersey główne wersje, 1.x oraz 2.x, Ty zdaje się być próbuje użyć kombinacji obydwu, które nie będą działać. Wersje 2.x nie mają niektórych klas, jak w wersji 1.x i na odwrót.

Jeśli chcesz użyć Jersey 2.x, to powinieneś być w użyciu Response zamiast ClientResponse

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

Podstawowy podział.

  • Wywołanie request() na WebTarget zwraca Invocation.Buidler

    Invocation.Builder builder = target.request(); 
    
  • Gdy nazywamy put, możemy wrócić do Response

    Response response = builder.put(Entity.json(friend)); 
    
  • Aby wyodrębnić znany typ z odpowiedzi, my może użyć readEntity(Class type)

    String responseString = response.readEntity(String.class); 
    response.close(); 
    
+0

dziękuję za pomoc mnie za każdym razem. Entity.json (friend) podaje błąd, który nie definiuje metody json (friend). – user3275095

+0

Upewnij się, że 'Podmiot' to [' javax.ws.rs.client.Entity'] (https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Entity.html) –

+0

Och, przykro mi, źle klasa Entity została zaimportowana. Poprawiono to. Dzięki. I tak pobierające i ustawiające są publiczne. Właśnie skopiowałem kod ze starszego postu. – user3275095