Что использовать вместо org.jboss.resteasy.client.ClientRequest?
Я только что обнаружил, что org.jboss.resteasy.client.ClientRequest
устарел, недействительным все, что я мог найти в Google, о том, как использовать клиент RESTEasy
. Javadoc не дает никаких указаний относительно того, что использовать. Google также молчал.
На данный момент я вернулся к 2.3.5
, но так или иначе был бы заинтересован в ответе, а также о том, как нужно было найти ответ, не спрашивая кого-то, кто знал - есть ли ресурс с этой информацией, где я мог бы выглядеть?
Ответы
Ответ 1
В бета-версии 3.0 здесь описываются такие отклонения как:
API-интерфейс для ручного клиента Resteasy, перехватчики, StringConverters, StringParamterConverters и API-интерфейсы Async HTTP устарели и будут удалены, возможно, в более позднем выпуске. Теперь есть JAX-RS 2.0 для каждой из этих вещей.
Это подразумевает, что предпочтительным методом будет использование API-интерфейса JAX-RS, описанного в этот пост
Ответ 2
Если мы предположим, что существует API JSON в http://example.org/pizza/{id}.json
, (где "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);
}
}
}
(этому также помогает этот пост, хотя он использует устаревший API).
Обратите внимание, что вам может потребоваться зарегистрировать специальный обработчик, если вы хотите использовать Джексона для чтения POJO (или, я думаю, с помощью JAXB), как описано здесь
Обновление
Вам понадобятся только следующие зависимости 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.
Ответ 3
документация RESTEasy говорит, что мы должны закрыть клиентское соединение; это будет client.close()
в вашем примере. Но каждый пример, который я могу найти, не делает этого. Будет ли соединение клиента автоматически закрываться во время сбора мусора?