GAE Jersey RESTful服务POST JSON

4

我正在尝试编写一个服务,它将接受POST请求中的JSON或XML对象。我已经成功编写了一个GET请求处理程序,它将根据头部的accept返回XML或JSON格式的对象。当我以JSON作为请求正文进行POST时,我的POST方法中的Java对象没有填入JSON中的值。

@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void postUser(@Context HttpServletRequest Req, User user) 
{
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try 
    {
        pm.makePersistent(user);
    } 
    finally 
    {
        pm.close();
    }

}

当我使用POST方法打破类型为User的Java对象“user”时,其属性具有null值。该对象本身不为空,只是其属性为空。
这是通过POST提交的JSON。
{"user":{"logon":"kevin","password":"password","personid":"xyz"}}

这是我的类

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;
 }
1个回答

5
也许没有人回答我的问题,因为问题的解决方案是如此显而易见!我注意到了自己的错误后,我可以回答自己的问题。我提交的JSON正文格式化为一个User对象列表,所以如果我编辑
{"user":{"logon":"kevin","password":"password","personid":"xyz"}}

为了

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

一切正常是因为我的@POST处理程序没有期望一个User对象列表。作为替代方案,我可以调整我的@POST处理程序以接受List<User>参数!


1
实际上,你正在发布一个包含“User”的user属性的对象。对象用{}表示,数组用[]表示。并没有所谓的List。 - Peter Knego

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接