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

Одним из решений было бы иметь еще один класс JAXB, который соответствует вашей желаемой структуре JSON, что-то вроде этого (конструктор отсутствует):

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

    @XmlElement 
    private String name; 

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

Затем вы должны использовать @XmlJavaTypeAdapter на классе UserInfo, который выглядит примерно так:

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

Хорошая идея, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^