2014-07-03 63 views
0

我已经使用Jackson和JSONObject生成了一个普通的JSON - 事情在这里很好。我有一个特定的情况,我的pojo看起来像下面,我需要的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":"[email protected]", 
"password":"password", 
"sfSessionId":null, 
"sfServerUrl":null 
} 

请大家帮忙。提前致谢!

+0

还显示您从代码中生成JSON的代码。 –

+0

我正在使用您提到的相同的ObjectMapper。 – buddy24

回答

0

更改IRestBean接口以包括@JsonTypeInfo注释:

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

接着,注释LoginApi@JsonTypeName

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

这些都是杰克逊特定注释。

+0

我正在尝试此操作,但仍然无法按预期工作。我应该在我的一代课程中添加任何东西给mapper吗? – buddy24

+0

这种解决了我的问题。这里是我在IRestBean界面中所做的改变:@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.PROPERTY,property =“@ type”) – buddy24

+0

我没有15个“投票”的声望 - 对不起..但非常感谢您的帮助。 – buddy24

1

向该POJO添加一个私有字段。

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

    ... 

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

    ... 
} 

请注意使用XmlAttribute来自动追加“@”到名称。

+0

感谢您的帮助。 – buddy24