从POJO为特定方案生成JSON

时间:2014-07-03 06:20:07

标签: java json api pojo

我已经使用Jackson和JSONObject生成一个简单的JSON - 这里的事情很好。我有一个特定的情况,我的pojo看起来像下面,我需要JSON是指定的格式。

package test;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "login")
public class LoginApi implements IRestBean {

private String username;
private String password;
private String sfSessionId;
private String sfServerUrl;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getSfSessionId() {
    return sfSessionId;
}

public void setSfSessionId(String sfSessionId) {
    this.sfSessionId = sfSessionId;
}

public String getSfServerUrl() {
    return sfServerUrl;
}

public void setSfServerUrl(String sfServerUrl) {
    this.sfServerUrl = sfServerUrl;
}
}

我能够生成的JSON看起来像这样:

{
 "username" : null,
 "password" : null,
 "sfSessionId" : null,
 "sfServerUrl" : null
}

但这不是我的要求 - 我需要以下格式的JSON,以便我的服务器接受这个作为有效的JSON:

{
 "@type":"login",
 "username":"username@domain.com",
 "password":"password",
 "sfSessionId":null,
 "sfServerUrl":null
 }

请帮忙。提前谢谢!

2 个答案:

答案 0 :(得分:1)

将私有字段添加到具有类型的POJO。

@XmlRootElement(name = "login")
public class LoginApi implements IRestBean {

    ...

    @XmlAttribute(name = "type")
    private String getJsonType() {
        return "login";
    }

    ...
}

请注意使用XmlAttribute自动附加" @"这个名字。

答案 1 :(得分:0)

更改IRestBean界面以包含@JsonTypeInfo注释:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="@type")
public interface IRestBean {
    ...
}

接下来,使用@JsonTypeName注释LoginApi班级:

@XmlRootElement(name = "login")
@JsonTypeName("login")
public class LoginApi implements IRestBean {
    ...
}

这些都是杰克逊特有的注释。