java - GAE Jersey RESTful 服务 POST JSON

标签 java eclipse google-app-engine rest jersey

我正在尝试编写一个服务,它将在 POST 请求中接受 JSON 或 XML 对象。我已经成功编写了一个 GET 请求处理程序,它将按照 header 接受中的请求将我的对象作为 XML 或 JSON 返回。当我使用 JSON 作为请求主体向服务发布时,我的 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 方法中中断时,用户类型的 Java 对象“用户”的属性具有空值。该对象本身不是 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;
 }

最佳答案

也许没有人回答我的问题,因为这个问题有如此明显的解决方案!

在我发现自己的错误后,我可以回答我自己的问题。

我提交的 JSON 正文被格式化为 User 的列表对象所以如果我编辑

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

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

一切正常,因为我的@POST 处理程序不期待 User 的列表对象。或者我可以调整我的@POST 处理程序以接受 List<User>参数!

关于java - GAE Jersey RESTful 服务 POST JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4260551/

相关文章:

java - 稍后在程序中删除一行文本

java - 如何获取java运行时源?

java - 未声明时如何从 Eclipse 重命名方法/字段

google-app-engine - 将字体添加到 docker 图像

java - 无法在 GAE JDO 中持久化对象

java - 结合 JXTable 和 RXTable

java - 在 java 中识别磁盘类型的文件系统格式,如 ntfs、fat16/32 或 ext

java - 使用 Eclipse 在自动生成的文件中搜索

google-app-engine - 使用 Google Cloud Logging (Python) 访问 GAE 日志文件

java - ThreadpoolExecutor 具有重试能力,并在任务失败多次后关闭