2017-04-03 5 views
1

Ich erstelle einen RESTful-Dienst für den Datenzugriff.Objekt von @PathParam abrufen

Also begann ich diesen Dienst zu schreiben, zuerst habe ich eine ReadOnlyResource Schnittstelle mit dem folgenden Code:

public interface ReadOnlyResource<E, K> { 
    Collection<E> getAll(); 
    E getById(K id); 
} 

Wo E der zurückgegebene Art und K ist das Schlüsselelement ist.

Also, wenn ich mit <Integer, Integer> Umsetzung bin, werde ich den Schlüssel wie t injizieren

@GET 
@Path("/{id}") 
@Override 
public Integer getById(@PathParam("id") Integer id) { 
    return null; 
} 

Aber als mein Schlüssel ist komplexer, wie folgt aus:

public class ComplexKey { 
    private String name; 
    private int value; 
} 

Wie kann ich diese injizieren also kann ich meine Schnittstelle benutzen?

Gibt es eine Möglichkeit, beide Params zu injizieren und den Schlüssel mit ihnen zu erstellen?

EDIT: die Lösung von @QueryParam hilft nicht, weil das, was ich zu erreichen versuche, ist zu/einige Namen/gewisse Anzahl und erhält eine ComplexKey Instanz gehen, die die einen Namen enthält und einige Zahlenwerte aus dem url.

+0

Mögliche Duplikate von [Übergeben benutzerdefinierten Abfrageparameter] (http://stackoverflow.com/questions/30403033/passing-custom-type-query-parameter) – zloster

+0

Nicht genau, wenn ich wollte eine Möglichkeit, dass ich es mit meiner aktuellen Schnittstelle implementieren kann, muss das 1 Argument an die Methode übergeben werden. – TalOhana

Antwort

3

, was ich zu erreichen versuchen, ist zu gehen/some Name/some Nummer und eine ComplexKey Instanz erhalten, die den einen Namen und einige Zahlenwerte aus der URL enthält

Verwenden Sie ein @BeanParam

public class ComplexKey { 
    @PathParam("name") 
    private String name; 
    @PathParam("value") 
    private int value; 
    // getters/setters 
} 

@Path("/{name}/{value}") 
getById(@BeanParam ComplexKey key)