2016-05-06 69 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

好主意,谢谢! –