2010-11-23 6 views
4

J'essaye d'écrire un service qui acceptera un objet JSON ou XML dans une requête POST. J'ai réussi à écrire un gestionnaire de requêtes GET qui retournera mon objet en XML ou JSON comme demandé dans l'en-tête accept. Lorsque je POST au service avec JSON en tant que le corps de la demande, l'objet Java dans ma méthode POST n'est pas rempli avec les valeurs de JSON. Lorsque j'interrompt la méthode POST, l'objet Java "user" de type User a des valeurs nulles pour les propriétés. L'objet n'est pas nul en soi, seulement les propriétés.GAE Jersey Service RESTful POST JSON

C'est le JSON soumis par POST

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

Et voici ma classe

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; 
} 

Répondre

5

Peut-être que personne ne répond à ma question parce que le problème a une telle solution évidente!

Je peux répondre à ma propre question après avoir remarqué mon erreur.

Le corps JSON je soumettais a été formaté comme une liste de User objets si je modifier

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

à

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

tout fonctionne parce que mon gestionnaire de @POST ne s'y attend pas une liste de User objets. Alternativement, je pourrais adapter mon gestionnaire @POST pour accepter un paramètre List<User>!

+1

En fait, vous publiez un objet avec la propriété 'user' contenant" User ". Les objets sont désignés par {}, les tableaux par []. Il n'y a pas de liste en soi. –