2017-09-20 4 views
0

Ich habe die folgenden Web-Service nur lernen:Jackson Liste <Object> zu String

@GET 
@Path("/tmp/uno") 
@Produces(MediaType.APPLICATION_JSON) 
public ArrayList<Object> getData() { 
    KeyValue<Integer, Integer> kv = new KeyValue<>(1, 2); 

    List<KeyValue> list = new ArrayList<>(); 
    list.add(kv); 

    **return new ArrayList<Object>(list);** 
} 

ich die Besetzung nur zu Testzwecken zu tun und ich bin immer folgende Fehlermeldung:

sep 20, 2017 5:53:17 PM org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo 
SEVERE: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.ArrayList<java.lang.Object>. 

Wenn ich werfe die Liste nicht

@GET 
@Path("/tmp/uno") 
@Produces(MediaType.APPLICATION_JSON) 
public **List<KeyValue>** getData() { 
    KeyValue<Integer, Integer> kv = new KeyValue<>(1, 2); 

    List<KeyValue> list = new ArrayList<>(); 
    list.add(kv); 

    **return list;** 
} 

ich die folgende Antwort erhalten:

[ 
    { 
     "key": { 
      "type": "int", 
      "value": 1 
     }, 
     "value": { 
      "type": "int", 
      "value": 2 
     } 
    } 
] 

Ich habe zwei Fragen 1.- Warum kann ich keine Liste von Objekten antworten? 2.- Warum hat jede Eigenschaft ihren Datentyp im jSON?


Die keyValue Klasse ist die folgende:

public class KeyValue<X, Y> { 
private X key; 
private Y value; 

public KeyValue() { 
    // Auto-generated constructor stub 
} 

public KeyValue(X key, Y value) { 
    this.key = key; 
    this.value = value; 
} 

public X getKey() { 
    return key; 
} 

public Y getValue() { 
    return value; 
} 

public void setKey(X key) { 
    this.key = key; 
} 

public void setValue(Y value) { 
    this.value = value; 
} 
} 

Meine Jackson Abhängigkeit ist:

<dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>2.26</version> 
    </dependency> 

Antwort

0

Versuchen Sie, die "echte" Jackson-Bibliothek zu verwenden:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.9.1</version> 
</dependency> 

Oder, wie es scheint, verwenden Sie Jersey, Fol niedriges Mkyong-Beispiel:

https://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/

Verwandte Themen