Как отправить объект json из клиента REST с помощью javax.ws.rs.client.WebTarget
У меня есть POJO, приведенное ниже, которое я хочу выполнить на сервере как JSON или XML.
Это то, что я сделал
КЛИЕНТ:
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);
}
Примеры, которые я нашел в Интернете, используют WebResource.
Я не знаю, как это сделать с помощью WebTarget. То, что я сделал, берется из некоторого примера, найденного в SO, но Entity.entity() дает ошибку undefined метод 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
+ "]";
}
Просьба указать, как это сделать.
Спасибо
Ответы
Ответ 1
Существуют две разные версии Джерси, 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'
Основная разбивка.
-
Вызов request()
on WebTarget
возвращает 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();