2010-11-23 6 views
4

Ich versuche, einen Dienst zu schreiben, der ein JSON- oder XML-Objekt in einer POST-Anfrage akzeptiert. Ich habe erfolgreich einen GET-Request-Handler geschrieben, der mein Objekt als XML oder JSON zurückgibt, wie in der Accept-Datei der Kopfzeile gefordert. Wenn ich an den Dienst mit JSON als den Körper der Anforderung senden, wird das Java-Objekt in meiner POST-Methode nicht mit den Werten aus dem JSON gefüllt.GAE Jersey RESTful Service POST JSON

Wenn ich die POST-Methode einbringe, hat das Java-Objekt "user" vom Typ User null Werte für die Eigenschaften. Das Objekt ist nicht null selbst, nur die Eigenschaften.

Dies ist die JSON per Post

{"user":{"logon":"kevin","password":"password","personid":"xyz"}} 

Und hier ist meine Klasse

package com.afalon.cloud.contracts; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.jdo.annotations.Extension; 
import javax.jdo.annotations.IdGeneratorStrategy; 
import javax.jdo.annotations.PersistenceCapable; 
import javax.jdo.annotations.Persistent; 
import javax.jdo.annotations.PrimaryKey; 

@PersistenceCapable 
@XmlRootElement(name = "user") 
@XmlAccessorType(XmlAccessType.NONE) 
public class User { 

@Persistent 
@XmlElement(name="logon") 
private String logon; 

@Persistent 
@XmlElement(name="password") 
private String password; 

@Persistent 
@XmlElement(name="personid") 
private String personid; 

@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true") 
    @XmlElement(name="userid") 
private String userid; 

public User() {} 

public void setLogOn(String value) { 
    logon = value; 
} 

public String getLogOn() { 
    return logon; 
} 

public void setPassword(String value) { 
    password = value; 
} 

public String getPassword() { 
    return password; 
} 

public void setPersonId(String value) { 
    personid = value; 
} 

public String getPersonId() { 
    return personid; 
} 

public String getUserId() { 
    return userid; 
} 

Antwort

5

niemand beantwortet meine Frage Vielleicht, weil das Problem, eine solche offensichtliche Lösung hat!

Ich kann meine eigene Frage beantworten, nachdem ich meinen Fehler bemerkt habe.

Der JSON Körper wurde ich als eine Liste von User Objekte formatiert wurde Vorlage so, wenn ich

{"user":{"logon":"kevin","password":"password","personid":"xyz"}} 

zu

{"logon":"kevin","password":"password","personid":"xyz"} 

alles funktioniert bearbeiten, weil mein @POST Handler ist nicht eine Liste erwartet User Objekte. Alternativ könnte ich meinen @ POST-Handler anpassen, um einen List<User> Parameter zu akzeptieren!

+1

Eigentlich haben Sie ein Objekt mit der Eigenschaft 'user' gepostet, das" User "enthielt. Objekte werden mit {}, Arrays mit [] bezeichnet. Es gibt keine Liste an sich. –