2016-05-24 8 views
0

Ich versuche, eine Ressource (in einem REST-Java-Webdienst mit Jersey) zu erstellen, die eine ArrayList<String> zurück an Benutzer sendet.Return ArrayList <String> Medientyp JAX-RS

Ich habe mehrere MediaType ausprobiert, aber ich bin nicht in der Lage zu finden, welche ich verwenden soll, um meine ArrayList<String> einfach zurückzusenden.

Hier ist ein Codebeispiel, das mein Problem veranschaulicht:

@Path("duck") 
public class DuckResource extends ResourceMongoDB{ 

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public ArrayList<String> getAll(){ 
    ArrayList<String> result = new ArrayList<String>(); 
    result.add("one"); 
    result.add("two"); 
    result.add("three"); 
    return result; 
} 
} 

Sie eine Idee haben Sie, wie leicht ein ArrayList<String> zurück zu schicken?

EDIT: Hier ist meine pom.xml Datei

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

<modelVersion>4.0.0</modelVersion> 

<groupId>com.example.rest</groupId> 
<artifactId>jersey-service</artifactId> 
<packaging>jar</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>jersey-service</name> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey</groupId> 
      <artifactId>jersey-bom</artifactId> 
      <version>${jersey.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 
<dependency> 
    <groupId>postgresql</groupId> 
    <artifactId>postgresql</artifactId> 
    <version>8.3-606.jdbc3</version> 
</dependency> 
<dependency> 
    <groupId>org.mongodb</groupId> 
    <artifactId>mongo-java-driver</artifactId> 
    <version>3.2.2</version> 
</dependency> 
<dependency> 
      <groupId>org.mongodb.morphia</groupId> 
      <artifactId>morphia</artifactId> 
      <version>1.1.0</version> 
    </dependency> 
<dependency> 
    <groupId>com.google.code.gson</groupId> 
    <artifactId>gson</artifactId> 
    <version>2.6.2</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-moxy</artifactId> 
</dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-grizzly2-http</artifactId> 
    </dependency>   
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.9</version> 
     <scope>test</scope> 
    </dependency> 
<dependency> 
    <groupId>commons-lang</groupId> 
    <artifactId>commons-lang</artifactId> 
    <version>2.6</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>1.8</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.8</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-core</artifactId> 
    <version>1.8</version> 
</dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <inherited>true</inherited> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.2.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>main.Main</mainClass> 
      </configuration> 
     </plugin> 
    </plugins> 
<resources> 
    <resource> 
     <directory>src/main/java/resources</directory> 
    </resource> 
</resources> 
</build> 

<properties> 
    <jersey.version>2.17</jersey.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

EDIT: Wenn ich meine getAll() -Methode aufrufen, das sind die folgenden Protokolle erhalte ich:

juin 08, 2016 10:09:58 AM com.mongodb.diagnostics.logging.JULLogger log 
INFOS: Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 
juin 08, 2016 10:09:58 AM com.mongodb.diagnostics.logging.JULLogger log 
INFOS: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=50} 
juin 08, 2016 10:09:58 AM com.mongodb.diagnostics.logging.JULLogger log 
INFOS: Opened connection [connectionId{localValue:1, serverValue:51}] to 127.0.0.1:27017 
juin 08, 2016 10:09:58 AM com.mongodb.diagnostics.logging.JULLogger log 
INFOS: Opened connection [connectionId{localValue:2, serverValue:52}] to localhost:27017 
juin 08, 2016 10:09:58 AM com.mongodb.diagnostics.logging.JULLogger log 
INFOS: Monitor thread successfully connected to server with description ServerDescription{address=127.0.0.1:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 2, 6]}, minWireVersion=0, maxWireVersion=4, maxDocumentSize=16777216, roundTripTimeNanos=424584} 
juin 08, 2016 10:09:58 AM com.mongodb.diagnostics.logging.JULLogger log 
INFOS: Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 2, 6]}, minWireVersion=0, maxWireVersion=4, maxDocumentSize=16777216, roundTripTimeNanos=389829} 
+1

Normalerweise würde ich hier 'List ' statt "ArrayList " erwarten. – khelwood

+0

Danke für den Rat, ich habe meinen Code \t '@ abrufen @Produces (MediaType.APPLICATION_JSON) public List getAll() geändert { \t \t Liste result = new Arraylist (); \t \t result.add ("eins"); \t \t result.add ("zwei"); \t \t result.add ("drei"); \t \t Ergebnis zurückgeben; } 'aber selbst wenn es besser Code ist, löste es mein Problem nicht –

+0

erhalten Sie irgendwelche Fehler, (im Zusammenhang mit messagebodywriter), können Sie auch eine einfache Zeichenfolge als Anwendung/Json senden? Vielleicht kannst du deine web.xml posten – gaurav5430

Antwort

1

ich eine Lösung mit genson gefunden haben.

Ich habe die folgende Abhängigkeit meiner pom-Datei:

<dependency> 
    <groupId>com.owlike</groupId> 
    <artifactId>genson</artifactId> 
    <version>1.4</version> 
</dependency> 

Und eingekapselt meine result in einer Antwort:

Response.status(Status.OK).entity(result).build(); 

Und voilà,

ich mein Problem Hoffnung teilen haben könnte half anderen!

-1

Sie können die Methode wie folgt ändern:

@GET 
@Path("/getAll") 
@Produces(MediaType.APPLICATION_JSON) 
public Response getAll() { 
    List<String> result = new ArrayList<String>(); 
    result.add("one"); 
    result.add("two"); 
    result.add("three"); 
    GenericEntity<List<String>> genericEntity = 
     new GenericEntity<List<String>>(result) {}; 
    return Response.ok(genericEntity).build(); 
} 

Die Abhängigkeiten in meinem pom.xml ist wie folgt:

<dependencies> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.8</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-json</artifactId> 
     <version>1.8</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-core</artifactId> 
     <version>1.8</version> 
    </dependency> 
</dependencies> 
+0

Ich habe in meiner Antwort einige kleine Änderungen vorgenommen. Wenn Sie dies in Tomcat ausführen, müssen Sie die richtigen Bibliotheken haben (wie in meiner pom.xml oben angegeben), sonst haben Sie Fehler 500. Die URL gibt mir eine getAll.json mit Ausgabe ["one", "" zwei drei"]. – BlackKnight

+0

kann ich diese Arbeit so machen, warum die down vote? – BlackKnight

+0

Hallo, Entschuldigung für die lange Zeit zu antworten. Ich habe deinen Ratschlag ausprobiert, aber leider kann ich es nicht schaffen. Ich habe die folgenden Abhängigkeiten: Postgresql, Mongodb, Morphium, Glassfish Jersey Medien, Glassfish Jersey Container, Junit, Commons Lang, plus die 3 Abhängigkeiten, die du mir gegeben hast. Ich werde meine vollständige pom.xml-Datei zu meiner Frage hinzufügen :) –