2016-07-26 5 views
2

Wie kann ich einen generischen Listenparameter an einen JAX-RS-Dienst senden? HierSenden eines generischen Listenparameters an einen JAX-RS-Webdienst

ist die Methode Unterschrift:

@POST 
@Path("findcustomers") 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public void FindCustomers(@PathParam("branchId") long branchId, 
          @PathParam("searchOptions") List<SearchOption> searchOptions) 
          throws Exception { 
    ... 
} 

SearchOption ist eine einfache Java-Klasse, bestehend aus primitiven Typen:

class SearchOption { 
    int channelId; 
    int locationId; 
    int targetStatus; 
} 

Der obige Code löst eine Ausnahme besagt, so etwas wie:

Keine Injektionsquelle für einen Parameter vom Typ gefunden [setzen Sie die Methodensignatur hier]

+0

Warum senden Sie es nicht in der Anfrage Payload oder senden Sie Ihre Suchkriterien als Abfrageparameter? –

+0

Nebenbei bemerkt, stellen Sie sicher, dass Sie ['javax.ws.rs.PathParam'] (http://docs.oracle.com/javaee/7/api/javax/ws/rs/PathParam.html) anstelle von [ 'javax.websocket.server.PathParam'] (http://docs.oracle.com/javaee/7/api/javax/websocket/server/PathParam.html). –

+0

@ CássioMazzochiMolin Danke. Es gibt mehrere Optionen zum Senden an den Server, und alle sind komplexe Objekte. Ist es möglich, alle als Abfrageparameter zu senden? –

Antwort

1

Ok, nach einer langen und schmerzhaften Recherche habe ich die Lösung gefunden.

Um ein POJO in einer Service-Methode akzeptieren zu können, müssen Sie Ihrem POJO das @ XmlRootElement-Attribut hinzufügen, einen Konstruktor ohne Argumente in die Klasse schreiben und Get/Setter für die Felder haben.

Ich habe so hier Maven benutze ist die minimal erforderliche Abhängigkeiten in pom.xml:

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet</artifactId> 
    <version>2.22.1</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>2.23.1</version> 
</dependency> 

Sie jetzt POJO Objekte in der API-Methoden senden und empfangen können.