2016-05-06 10 views
2

Wie könnte ich eine einfache JSON Struktur wie dieseJAXB Zugabe von ENUM als flache Struktur

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

mit JAXB Anmerkungen und diesem Code erhalten?

@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...() 
} 

Antwort

0

Eine Lösung wäre, um eine andere JAXB Klasse, die Ihre gewünschte JSON Struktur übereinstimmt, so etwas wie dieses (Konstruktor fehlt) (Userinfo sollte Enum Felder in der gleichen Hierarchieebene enthalten):

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

    @XmlElement 
    private String name; 

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

dann sollten Sie ein @XmlJavaTypeAdapter auf Klasse UserInfo verwenden, die etwa wie folgt aussehen:

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

Gute Idee, danke! –

Verwandte Themen