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!!
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.
@QueryParam ("Benutzer") int Benutzer
der Wert dieses Benutzers int sollte 123 sein
Siehe https://www.mkyong.com/webservices/jax-rs/jax-rs-queryparam-example/
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.