256 votes

Comment créer un client REST pour Java ?

Avec la JSR 311 et ses implémentations, nous disposons d'une norme puissante pour l'exposition d'objets Java via REST. Cependant, du côté client, il semble manquer quelque chose de comparable à Apache Axis pour SOAP - quelque chose qui cache le service web et marshalise les données de manière transparente en objets Java.

Comment créer des clients Java RESTful ? En utilisant HTTPConnection et en analysant manuellement le résultat ? Ou des clients spécialisés pour, par exemple, Jersey ou Apache CXR ?

0 votes

Je viens de trouver Clin d'œil apache dans l'incubateur Apache. Il pourrait s'agir d'un projet intéressant pour la création de serveurs et de clients REST.

2 votes

0 votes

Voir [Repos]( code.google.com/p/resting ). Il promet d'invoquer les services REST et de créer une liste d'objets à partir de la réponse XML/JSON/YAML en une seule étape.

4voto

JeeBee Points 11882

J'utilise Apache HTTPClient pour gérer tout le côté HTTP.

J'écris des analyseurs XML SAX pour le contenu XML qui analyse le XML dans votre modèle d'objet. Je crois que l'Axis2 expose également les méthodes XML -> Modèle (l'Axis 1 a caché cette partie, ce qui est ennuyeux). Les générateurs XML sont trivialement simples.

Il n'est pas long à coder et il est assez efficace, à mon avis.

3voto

Leon Points 848

Puisque personne ne l'a mentionné, en voici un autre : Feindre qui est utilisé par Nuage de printemps .

2voto

GG. Points 1030

Bien qu'il soit simple de créer un client HTTP et de faire une demande. Mais si vous souhaitez utiliser des clients générés automatiquement, vous pouvez utiliser WADL pour décrire et générer du code.

Vous pouvez utiliser Décrire le repos pour générer et compiler des WSDL, vous pouvez générer des clients en php, ruby, python, java et C# en l'utilisant. Il génère un code propre et il y a de bonnes chances que vous deviez le modifier un peu après la génération du code, vous pouvez trouver une bonne documentation et les idées sous-jacentes à l'outil. ici .

Il existe quelques exemples intéressants et utiles Outils WADL mentionné sur wintermute.

1voto

J'ai écrit une bibliothèque qui fait correspondre une interface Java à un service REST JSON distant :

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

1voto

abhishek ringsia Points 1058

Exemples de clients jersey Rest :
Ajout d'une dépendance :

         <!-- 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 et en passant deux paramètres :

          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 en passant un paramètre et en obtenant une réponse de la liste :

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

Dans l'exemple ci-dessus, il renvoie une liste que nous acceptons en tant que liste et que nous convertissons ensuite en tableau Json, puis en liste à partir d'un tableau Json.

Si la requête Post Request passe un objet Json comme paramètre :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X