web-dev-qa-db-fra.com

Comment utiliser les paramètres de requête dans Java Jersey Application?

Je suis un tutoriel et utilise également la question Stackoverflow here . Voici ma classe Java:

package com.crunchify.tutorial;

import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Consumes;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
import org.json.simple.JSONObject;

@Path("api")
public class CrunchifyAPI {

    @SuppressWarnings("unchecked")
    @GET
    @Path("/get")
    @Consumes(MediaType.TEXT_PLAIN)
    public String get(
            @DefaultValue("111") @QueryParam("user") int user,
            @Context UriInfo uriInfo
            ) {
        MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
        String nameParam = queryParams.getFirst("user");
        System.out.println("Data Received: " + uriInfo.getRequestUri().getQuery()
                + " | " + nameParam);
        JSONObject obj = new JSONObject();
        obj.put("auth", true);
        String ret = JSONObject.toJSONString(obj);
        return ret;
    }
}

Voici ce que j'obtiens de postier:

GET>> localhost/api/get?user=123

Réponse est:

{"auth":true}

Console du serveur:

Starting Crunchify's Embedded Jersey HTTPServer...

Started Crunchify's Embedded Jersey HTTPServer Successfully !!!
Data Received: ?user=123 | null
User Authenticated: true

J'ai essayé de passer avec String, Integer, etc. mais rien ne fonctionne. Les informations uri sont correctement imprimées et la réponse est correcte. Le problème est que je ne parviens pas à lire le paramètre dans le code Java. Je devrai passer de nombreux autres paramètres une fois que je serai capable de le faire. Veuillez suggérer. Merci!!

7
Amresh Kadian

Je pense que vous essayez trop fort. Autant que je sache, voici ce qui vous attend si vous appelez localhost/api/get? User = 123:

package com.crunchify.tutorial;

import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Consumes;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
import org.json.simple.JSONObject;

@Path("api")
public class CrunchifyAPI {

    @SuppressWarnings("unchecked")
    @GET
    @Path("/get")
    @Consumes(MediaType.TEXT_PLAIN)
    public String get(
            @DefaultValue("111") @QueryParam("user") Integer user,
            @Context UriInfo uriInfo
            ) {
        System.out.println("Data Received: " + uriInfo.getRequestUri().getQuery()
                + " | " + name);
        JSONObject obj = new JSONObject();
        obj.put("auth", true);
        String ret = JSONObject.toJSONString(obj);
        return ret;
    }
}

Tous ces éléments supplémentaires avec la chaîne de requête ne sont pas nécessaires si vous avez uniquement besoin des informations transmises dans le paramètre utilisateur.

3
Nielsvh

@QueryParam ("utilisateur") int utilisateur

la valeur de cet utilisateur int devrait être 123

Voir https://www.mkyong.com/webservices/jax-rs/jax-rs-queryparam-example/

1
Kalpesh Soni

Eh bien, je pense que vous rencontrez un problème avec les types Java.

Si votre utilisateur est un Integer, vous devez d'abord le passer à String si vous souhaitez utiliser un String (Integer.toString() ou String.valueof()). 

Mais la façon dont vous passez le paramètre me dérange, je ne suis pas sûr si vous pouvez transmettre des entiers par types de texte brut.

0
user8559497