2012-03-24 11 views
3

Ich baue eine REST-API mit JAX-RS. Ich habe POST, die ein JSON-Element verbraucht:JSON-Parsing mit JAX-RS

Das Element ist eine Klasse:

@XmlRootElement 
public class EventData{ 
    public long start; 
    public long end; 
    public Collection<Person> persons; 
} 

ich ein Verfahren wie dieses:

@POST 
@Consumes({MediaType.APPLICATION_JSON}) 
public Response transactionRequest(EventData insert){ 
....} 

, wenn ich einen JSON-String eines EventData per Post funktioniert gut, aber wenn ich zu wechseln:

@POST 
@Consumes({MediaType.APPLICATION_JSON}) 
public Response transactionRequest(ArrayList<EventData> insert){ 
....} 

und einen JSON String wie diesesendenwird es die ArrayList und seine EventData Objekte bauen, aber die EventData Objektvariablen sind null.

Kann jemand helfen?

Antwort

1

Sie müssen ein JSON-Array senden, das aus JSON-Objekten besteht, die Ihre EventData-Klasse darstellen.

Das von Ihnen angegebene Beispiel ist kein solches JSON-Array, sondern ein JSON-Objekt mit einer einzigen Eigenschaft namens 'eventData', die ein JSON-Array enthält.

Versuchen Sie so etwas (auf der Grundlage Ihrer EventData Klasse):

[ 
    { "start":1, "end":2, "persons":[] }, 
    { "start":3, "end":4, "persons":[] } 
] 

Beachten Sie, dass es keine Erwähnung Ihrer EventData Klasse ist, weil JSON kein Konzept der genannten Typen hat - es ist nur Objekte und Arrays Objekte; Nur die Eigenschaften von Objekten haben Namen.

+0

com.sun.jersey.json.impl.reader.JsonFormatException: Doppelpunkt erwartet statt "]" –

+0

Der JSON in meiner Antwort ist ein sehr grobes Beispiel, ich schlage vor, die Ausgabe von einer JAX-RS-Methode zu verwenden, die List zurückgibt mit einigen Dummy-Artikeln. Ich schreibe ein paar gültige JSON mit Ihrer 'EventData' Klasse in einer Minute :) –

+0

Ich habe meine Antwort mit einem gültigen JSON Sample aktualisiert. –