wake-up-neo.com

Wie verwende ich die Abfrageparameter in der Java Jersey Application?

Ich folge einem Tutorial und benutze auch die Stackoverflow-Frage hier . Hier ist meine Java-Klasse:

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

Folgendes erhalte ich vom Postboten:

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

Antwort ist:

{"auth":true}

Server-Konsole:

Starting Crunchify's Embedded Jersey HTTPServer...

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

Ich habe es mit String, Integer usw. versucht, aber nichts funktioniert. Die uri-Info wird korrekt gedruckt und die Antwort ist ebenfalls in Ordnung. Das Problem ist, dass ich nicht den Parameter bekomme, der in Java Code gelesen werden soll. Ich werde viele andere Parameter übergeben müssen, wenn ich das schaffen kann. Bitte vorschlagen. Vielen Dank!!

7
Amresh Kadian

Ich denke, du versuchst dich zu sehr. Soweit ich das beurteilen kann, sollten Sie Folgendes erhalten, wenn Sie localhost/api/get aufrufen: 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;
    }
}

Das gesamte Extra mit der Abfragezeichenfolge wird nicht benötigt, wenn Sie nur die im Benutzerparameter übergebenen Informationen benötigen.

3
Nielsvh

@QueryParam ("Benutzer") int Benutzer

der Wert dieses Benutzers int sollte 123 sein

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

1
Kalpesh Soni

Ich glaube, Sie haben ein Problem mit Java-Typen.

Wenn es sich bei Ihrem Benutzer um eine Integer handelt, sollten Sie ihn zuerst an String übergeben, wenn Sie mit einer String (Integer.toString() oder String.valueof()) arbeiten möchten. 

Aber die Art und Weise, wie Sie den Parameter übergeben, stört mich. Ich bin nicht sicher, ob Sie Ganzzahlen als einfache Medi-Typen übergeben können.

0
user8559497