2016-05-06 58 views
2

我怎麼能得到一個簡單的JSON結構這樣JAXB添加枚舉爲平面結構

{ 
    "id": 9901, 
    "name": "Reader", 
    "value": true 
} 

與JAXB註釋和代碼? (的UserInfo應該包含在同一層級枚舉字段)

@XmlRootElement 
public class UserInfo 
{ 
    private UserLevel level; 

    @XmlElement (name = "value") 
    private boolean allowed; 
} 

public enum UserLevel 
{ 
    READER ("Reader", 9901), 
    TESTER ("Tester", 9903); 

    private final String name; 
    private final int id; 

    private UserLevel(String name, int id) 
    { 
     this.name = name; 
     this.id = id; 
    } 

    get...() 
} 

回答

0

一個解決辦法是有,你想要的JSON結構,這樣的事情(構造函數缺失)相匹配的另一JAXB類:

@XmlRootElement 
public class UserInfoFlattened 
{ 
    @XmlElement 
    private int id; 

    @XmlElement 
    private String name; 

    @XmlElement (name = "value") 
    private boolean allowed; 
} 

那麼你應該在UserInfo類,它看起來大約像這樣使用@XmlJavaTypeAdapter

public class UserInfoAdapter extends XmlAdapter<UserInfoFlattened, UserInfo> 
{ 
    @Override 
    public UserInfoFlattened marshal(UserInfo userInfo) 
    { 
     return new UserInfoFlattened(userInfo.getValue(), userInfo.getUserLevel().getId(), userInfo.getUserLevel().getName()); 
    } 

    // unmarshal analogous 
} 
+0

好主意,謝謝! –