2014-07-03 64 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