2017-12-27 9 views
0

Ich habe einen JSON-Webservice Ich rufe mit einer Federauflage Vorlage. Einer der Anforderungsparameter ist eine Schnittstelle. Ich suche nach der richtigen Kombination von Anmerkungen (entweder Jackson oder Jaxb), die meine JSON Anfrage erstellen werden.Java Json Serialisierung von Interface-Typen

muss meine Anfrage wie folgt aussehen:

{ 
    "request": { 
     "specificAccountIdentifier": { 
      "field1" : "value", 
      "field2" : "value" 
     } 
    } 
} 

Doch gerade jetzt, es ist wie das Marshalling:

{ 
    "request": { 
     "accountIdentifier": { 
      "field1" : "value", 
      "field2" : "value" 
     } 
    } 
} 

Anfrage Klasse:

@XmlRootElement 
@XmlType 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Request { 
    @XmlAnyElement 
    @XmlElementRefs({@XmlElementRef(type = SpecificAccountIdentifier.class)}) 
    private AccountIdentifier accountIdentifier; 

    public Request() { 
    } 
} 

AccountIdentifier:

@XmlSeeAlso(SpecificAccountIdentifier.class) 
public interface AccountIdentifier extends Serializable { 
} 

SpecificAccountIdentifier:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
@XmlType 
public class SpecificAccountIdentifier implements AccountIdentifier { 
    private static final long serialVersionUID = 8894475816041559L; 
    private Long field1; 
    private Long field2; 
    ...class details... 
} 

Ich habe ein paar verschiedene Kombinationen von @JsonTypeInfo versucht, aber kann nichts richtig zu arbeiten.

UPDATE:

Auch nach unten in die Antwort suchen, ich konnte immer noch nichts an der Arbeit, so dass ich am Ende nur Serializer meinen eigenen Schreiben.

+0

sollten Sie private AccountIdentifier accountIdentifier werden Umbenennung; zu privaten AccountIdentifier specificAaccountIdentifier? – johnII

+0

Ich würde, aber es wird schließlich mehrere Implementierungen dafür geben, so nur den Variablennamen ändern wird nicht funktionieren. – draconswan

+0

meinst du das "specificAccountIdentifier" ist etwas dynamisch, je nachdem welche Implementierung? – johnII

Antwort