Frage

ist es möglich, zu konfigurieren GET-Methode variable Anzahl von URI-Parametern zu lesen und interpretieren sie entweder als variable Argument (Array) oder eine Sammlung? Ich weiß, Abfrageparameter kann als Liste / Satz gelesen werden, aber ich kann nicht für sie in meinem Fall gehen.

Z. B:.

@GET
@Produces("text/xml")
@Path("list/{taskId}")
public String getTaskCheckLists(@PathParam("taskId") int... taskId) {
    return Arrays.toString(taskId);
}

Vielen Dank im Voraus

War es hilfreich?

Lösung

Wenn ich Ihre Frage richtig verstanden hat, kann die @Path Annotation einen regulären Ausdruck nimmt eine Liste von Pfadkomponenten zu spezifizieren. Zum Beispiel so etwas wie:

@GET
@Path("/list/{taskid:.+}")
public String getTaskCheckLists(@PathParam("taskid") List<PathSegment> taskIdList) {
    ......
}

Es gibt ein ausführlicheres Beispiel hier .

Andere Tipps

Ich reiche dies nicht als Antwort, wie es nur ein Rand Fall auf der ist derzeit Antwort angenommen, das, was ich habe auch verwendet. In meinem Fall (Jersey 1.19) /list/{taskid:.+} würde für den Rand Fall von Null variablen Parametern nicht. Ändern des RegEx zu /list/{taskid:.*} sorgte dafür. Siehe auch diesem Artikel (das scheint anwendbar zu sein).

Darüber hinaus auf den regulären Ausdruck zu Mächtigkeit Indikatoren * zu wechseln (statt +) Ich hatte auch programmatisch mit dem Fall von leeren Saiten zu behandeln, wie ich die List<PathSegment> in eine List<String> übersetzen würde (es passiere in meinen DB-Zugangscode ).

Der Grund, warum ich von PathSegment zu String bin zu übersetzen ist, dass ich nicht eine Klasse aus dem javax.ws.rs.core Paket wollte meine Data Access Layer Code verschmutzen.

Hier ist ein komplettes Beispiel:

@Path("/listDirs/{dirs:.*}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response listDirs(@PathParam("dirs") List<PathSegment> pathSegments) {
    List<String> dirs = new ArrayList<>();
    for (PathSegment pathSegment: pathSegments) {
        String path = pathSegment.getPath();
        if ((path!=null) && (!path.trim().equals("")))
            dirs.add(pathSegment.getPath());
    }
    List<String> valueFromDB = db.doSomeQuery(dirs);
    // construct JSON response object ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top