我已经使用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
}
请帮忙。提前谢谢!
答案 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 {
...
}
这些都是杰克逊特有的注释。