web-dev-qa-db-fra.com

Comment créer un service Web reposant avec des paramètres d'entrée?

Je crée un service Web reposant et je voulais savoir comment créer un service avec des paramètres d'entrée et comment l'invoquer à partir d'un navigateur Web.

Par exemple

@Path("/todo")
public class TodoResource {
    // This method is called if XMLis request
    @PUT
    @Produces( {MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
    public Todo getXML() {
        Todo todo = new Todo();
        todo.setSummary("This is my first todo");
        todo.setDescription("This is my first todo");
        return todo;
    }

et je peux l'invoquer en utilisant http: // localhost: 8088/JerseyJAXB/rest/todo

et je veux créer une méthode comme 

@Path("/todo")
    public class TodoResource {
        // This method is called if XMLis request
        @PUT
        @Produces( {MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
        public Todo getXML(String x, String y) {
            Todo todo = new Todo();
            todo.setSummary(x);
            todo.setDescription(y);
            return todo;
        }

Dans le cas de services Web basés sur du savon, je l'invoquerais comme ceci

http: // localhost: 8088/JerseyJAXB/rest/todo? x = abc & y = pqr

mais je veux savoir comment l'invoquer en utilisant repos et puis-je aussi passer les paramètres comme je le fais dans l'exemple ci-dessus lorsque j'utilise repos et maillot.

17
SSG

Vous pouvez . Essayez quelque chose comme ça:

@Path("/todo/{varX}/{varY}")
@Produces({"application/xml", "application/json"})
public Todo whatEverNameYouLike(@PathParam("varX") String varX,
    @PathParam("varY") String varY) {
        Todo todo = new Todo();
        todo.setSummary(varX);
        todo.setDescription(varY);
        return todo;
}

Ensuite, appelez votre service avec cette URL;
http: // localhost: 8088/JerseyJAXB/rest/todo/summary/description

36
perissf

Si vous voulez des paramètres de requête, vous utilisez @QueryParam.

public Todo getXML(@QueryParam("summary") String x, 
                   @QueryParam("description") String y)

Mais vous ne pourrez pas envoyer de PUT depuis un simple navigateur Web (aujourd'hui). Si vous tapez directement l'URL, ce sera un GET. 

Philosophiquement, cela semble être un post-test. Dans REST, vous utilisez généralement POST sur une ressource commune, /todo, où cette ressource crée et renvoie une nouvelle ressource, ou sur une ressource spécifiquement identifiée, telle que /todo/<id>, pour la création et/ou la mise à jour.

10
dbreaux

Faites attention. Pour cela, vous avez besoin de @GET (pas de @PUT).

2
Oliver Raupach

une autre façon de faire est d’obtenir UriInfo au lieu de tout QueryParam 

Ensuite, vous pourrez obtenir le queryParam selon vos besoins dans votre code 

@GET
@Path("/query")
public Response getUsers(@Context UriInfo info) {

    String param_1 = info.getQueryParameters().getFirst("param_1");
    String param_2 = info.getQueryParameters().getFirst("param_2");


    return Response ;

}
2
Ashish Shetkar

Vous pouvez essayer ceci ... mettez les paramètres comme:
http: // localhost: 8080/WebApplication11/webresources/generic/getText? arg1 = hello dans votre navigateur ...

package newpackage;

import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;


import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import javax.ws.rs.QueryParam;

@Path("generic")
public class GenericResource {

    @Context
    private UriInfo context;

    /**
     * Creates a new instance of GenericResource
     */
    public GenericResource() {
    }

    /**
     * Retrieves representation of an instance of newpackage.GenericResource

     * @return an instance of Java.lang.String
     */
    @GET
    @Produces("text/plain")
    @Consumes("text/plain")
    @Path("getText/")
    public String getText(@QueryParam("arg1")
            @DefaultValue("") String arg1) {

       return  arg1 ;  }

    @PUT
    @Consumes("text/plain")
    public void putText(String content) {





    }
}
0
Mr. Pawan kumar