Подтвердить что ты не робот

Что использовать вместо org.jboss.resteasy.client.ClientRequest?

Я только что обнаружил, что org.jboss.resteasy.client.ClientRequest устарел, недействительным все, что я мог найти в Google, о том, как использовать клиент RESTEasy. Javadoc не дает никаких указаний относительно того, что использовать. Google также молчал.

На данный момент я вернулся к 2.3.5, но так или иначе был бы заинтересован в ответе, а также о том, как нужно было найти ответ, не спрашивая кого-то, кто знал - есть ли ресурс с этой информацией, где я мог бы выглядеть?

4b9b3361

Ответ 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() в вашем примере. Но каждый пример, который я могу найти, не делает этого. Будет ли соединение клиента автоматически закрываться во время сбора мусора?