使用 Jersey 和 JSON,如何忽略根元素?

Posted

技术标签:

【中文标题】使用 Jersey 和 JSON,如何忽略根元素?【英文标题】:Using Jersey and JSON, how to ignore the root element? 【发布时间】:2013-12-28 10:32:44 【问题描述】:

我在 ios 端使用 RestKit,在 Java 端使用 Jersey 来处理 JSON。

RestKit 正在发送以下内容:


    "user": 
        "emailAddress": "someuser",
        "password": "somepassword"
    

在Java端,User类如下:

@Entity
public class User 
    public String emailAddress;
    public String password;
    public List<UserForm> userForms;

    ... getters and setters ...

我在 Jersey 服务上有以下内容:

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public User login(User someUser) throws IOException 

 ...

someUser 对象中的所有内容均为空。所以,我想我是想让 Jersey 忘记根节点,因为当他发回一些东西时,它的形式是:


    "emailAddress": "server",
    "password": "serverpass",

如果有任何帮助,我的 web.xml 包含以下内容:

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.something.services;org.codehaus.jackson.jaxrs</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>


<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/webapi/*</url-pattern>
</servlet-mapping>

对不起,我对泽西岛有点陌生,我一直在疯狂地寻找答案,所以任何帮助都将不胜感激。提前谢谢大家!

【问题讨论】:

【参考方案1】:

如果您希望 RestKit 从 JSON 中删除 user 键(或者不添加它),请将您的请求描述符上的 rootKeyPath 设置为 nil

【讨论】:

很简单。仍然会很好奇如何在 Jersey 端执行此操作,即忽略根路径。

以上是关于使用 Jersey 和 JSON,如何忽略根元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何反序列化 JSON 数组并忽略根节点?

无法使用 Jersey 客户端解组 JSON 对象数组

如何使用 JAXB 使用 Jersey 1.6 生成 JSON 输出

如何使用 JAXB 使用 Jersey 1.6 生成 JSON 输出

如何使用 Jersey API 从 RESTful Web 服务发送和接收 JSON 数据

如何使用 Jersey JSON POJO 支持?