3 votes

Transmettre un paramètre au service web REST via une URL

Je suis en train de créer un petit service web REST en utilisant Netbeans. Voici mon code :

private UriInfo context;
private String name;

public GenericResource() {
}

@GET
@Produces("text/html")
public String getHtml() {
    //TODO return proper representation object
    return "Hello "+ name;
}

@PUT
@Consumes("text/html")
public void putHtml(String name) {
    this.name = name;
}

Je suis en train d'appeler la méthode get ok puisque quand j'appelle http://localhost:8080/RestWebApp/resources/greeting J'obtiens "Hello null" mais j'essaie de passer un paramètre en utilisant http://localhost:8080/RestWebApp/resources/greeting?name=Krt_Malta mais la méthode PUT n'est pas appelée... Est-ce la bonne façon de passer un paramètre ou est-ce que je rate quelque chose ?

Je suis un nouveau venu sur Rest bdw, alors désolé si c'est une question simple.

Merci ! :) Krt_Malta

0voto

Samuel Points 5878

La deuxième URL est une demande GET simple. Pour transmettre des données à une requête PUT, vous devez les transmettre en utilisant un formulaire. L'URL est réservée aux GET pour autant que je sache.

0voto

sjngm Points 4108

Si vous construisez vous-même l'en-tête HTTP, vous devez utiliser POST au lieu de GET :

GET /RestWebApp/resources/greeting?name=Krt_Malta HTTP/1.0

contre

POST /RestWebApp/resources/greeting?name=Krt_Malta HTTP/1.0

Si vous utilisez un formulaire HTML, vous devez définir l'attribut method-attribute sur "PUT" :

<form action="/RestWebApp/resources/greeting" method="PUT">

0voto

Pour que JAX-RS mette en œuvre une méthode annotée de @PUT vous devez soumettre un PUT demande. Les navigateurs normaux ne font pas cela, mais on peut utiliser cURL ou une bibliothèque client HTTP.

Pour faire correspondre un paramètre de requête à un argument de méthode, JAX-RS fournit la fonction @QueryParam annotation.

public void putWithQueryParam(@QueryParam("name") String name) {
  // do something
}

0voto

Paner Points 466

Vous pouvez régler :

@PUT
@path{/putHtm}
@Consumes("text/html")
public void putHtml(String name) {
    this.name = name;
}

et si vous utilisez quelque chose comme la bibliothèque Volley de Google, vous pouvez le faire.

        GsonRequest<String> asdf = new GsonRequest<String>(ConnectionProperties.happyhourURL + "/putHtm", String.class, yourString!!, true,
                new Response.Listener<Chain>() {
                    @Override
                    public void onResponse(Chain response) {

                    }
                }, new CustomErrorListener(this));
        MyApplication.getInstance().addToRequestQueue(asdf);

et GsonRequest ressemblera :

public GsonRequest(String url, Class<T> _clazz, T object, boolean needLogin, Listener<T> successListener, Response.ErrorListener errorlistener) {
    super(Method.PUT, url, errorlistener);
    _headers = new HashMap<String, String>();
    this._clazz = _clazz;
    this.successListener = successListener;
    this.needsLogin = needLogin;
    _object = object;
    setTimeout();
}

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