REST клиенты для Java? - PullRequest
       62

REST клиенты для Java?

215 голосов
/ 21 октября 2008

С JSR 311 и его реализациями у нас есть мощный стандарт для представления объектов Java с помощью REST. Однако на стороне клиента, похоже, чего-то не хватает, что сравнимо с Apache Axis для SOAP - что-то, что скрывает веб-сервис и прозрачно передает данные обратно в объекты Java.

Как вы создаете клиенты Java RESTful? Используя HTTPConnection и ручной анализ результата? Или специализированных клиентов, например, Джерси или Apache CXR?

Ответы [ 17 ]

4 голосов
/ 28 апреля 2018

Поскольку никто не упоминал, вот еще один: Feign , который используется Spring Cloud .

4 голосов
/ 29 апреля 2012

Попробуйте JdkRequest из jcabi-http (я разработчик). Вот как это работает:

String body = new JdkRequest("http://www.google.com")
  .header("User-Agent", "it's me")
  .fetch()
  .body()

Проверьте этот блог для получения более подробной информации: http://www.yegor256.com/2014/04/11/jcabi-http-intro.html

2 голосов
/ 02 февраля 2016

Уже некоторое время я использую Resty :

JSONResource jsonResource = new Resty().json(uri);

Примеры можно найти здесь .

1 голос
/ 13 января 2013

Хотя создать HTTP-клиент и выполнить его просто. Но если вы хотите использовать некоторые автоматически сгенерированные клиенты, вы можете использовать WADL для описания и генерации кода.

Вы можете использовать RestDescribe для генерации и компиляции WSDL, вы можете генерировать клиентов в php, ruby, python, java и C #, используя это. Он генерирует чистый код, и есть хорошее изменение: вам нужно немного его настроить после генерации кода, вы можете найти хорошую документацию и основные идеи, лежащие в основе инструмента здесь .

Есть несколько интересных и полезных WADL инструментов , упомянутых на wintermute.

1 голос
/ 23 сентября 2014

Примеры клиентского отдыха Джерси:
Добавление зависимости:

         <!-- jersey -->
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.8</version>
    </dependency>
   <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.8</version>
    </dependency>

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-client</artifactId>
    <version>1.8</version>
</dependency>

    <dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20090211</version>
</dependency>

ForGetMethod и передача двух параметров:

          Client client = Client.create();
           WebResource webResource1 = client
                        .resource("http://localhost:10102/NewsTickerServices/AddGroup/"
                                + userN + "/" + groupName);

                ClientResponse response1 = webResource1.get(ClientResponse.class);
                System.out.println("responser is" + response1);

GetMethod передает один параметр и получает ответ из списка:

       Client client = Client.create();

        WebResource webResource1 = client
                    .resource("http://localhost:10102/NewsTickerServices/GetAssignedUser/"+grpName);    
    //value changed
    String response1 = webResource1.type(MediaType.APPLICATION_JSON).get(String.class);

    List <String > Assignedlist =new ArrayList<String>();
     JSONArray jsonArr2 =new JSONArray(response1);
    for (int i =0;i<jsonArr2.length();i++){

        Assignedlist.add(jsonArr2.getString(i));    
    }

In Above It Возвращает список, который мы принимаем как список, а затем преобразуем его в массив Json, а затем массив Json в список.

Если после запроса отправить объект Json в качестве параметра:

   Client client = Client.create();
    WebResource webResource = client
            .resource("http://localhost:10102/NewsTickerServices/CreateJUser");
    // value added

    ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class,mapper.writeValueAsString(user));

    if (response.getStatus() == 500) {

        context.addMessage(null, new FacesMessage("User already exist "));
    }
1 голос
/ 20 июля 2014

Попробуйте посмотреть на http-rest-client

https://github.com/g00dnatur3/http-rest-client

Вот простой пример:

RestClient client = RestClient.builder().build();
String geocoderUrl = "http://maps.googleapis.com/maps/api/geocode/json"
Map<String, String> params = Maps.newHashMap();
params.put("address", "beverly hills 90210");
params.put("sensor", "false");
JsonNode node = client.get(geocoderUrl, params, JsonNode.class);

Библиотека позаботится о сериализации и связывании json.

Вот еще один пример,

RestClient client = RestClient.builder().build();
String url = ...
Person person = ...
Header header = client.create(url, person);
if (header != null) System.out.println("Location header is:" + header.value());

И последний пример,

RestClient client = RestClient.builder().build();
String url = ...
Person person = client.get(url, null, Person.class); //no queryParams

Ура!

1 голос
/ 04 апреля 2014

Я написал библиотеку, которая отображает интерфейс Java на удаленную службу JSON REST:

https://github.com/ggeorgovassilis/spring-rest-invoker

public interface BookService {
   @RequestMapping("/volumes")
   QueryResult findBooksByTitle(@RequestParam("q") String q);

   @RequestMapping("/volumes/{id}")
   Item findBookById(@PathVariable("id") String id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...