2016-07-13 52 views
6

che sto cercando di mettere le annotazioni JAXB su POJO per produrre seguente JSON (via moxy):Converti POJO per JSON con barra nel nome del campo tramite moxy

{ 
    "apartmentNumber": "404", 
    "city/town": "SomeCity", 
    "state/province": "NoState", 
    "street": "1st Street" 
} 

Alcuni campi contiene barre. Quando sto cercando di mettere l'annotazione @XmlElement (name = "città/paese")

@XMLRootElement 
public class SubscriberAddress { 
    private String street; 
    private String apartmentNumber; 

    @XMLElement(name="city/town") 
    private String city; 

    @XMLElement(name="state/province") 
    private String state; 
} 

Moxy tratta nomi come XPaths e crea seguente JSON

{ 
    "apartmentNumber" : "404", 
    "city" : { 
     "town" : "SomeCity" 
    }, 
    "state" : { 
     "province" : "NoState" 
    }, 
    "street" : "1st Street" 
} 

Esiste un modo per sfuggire barra/non consentire a moxy di trattare le barre nei nomi degli elementi?

+0

ho potuto solo immaginare, ma potreste provare a utilizzare un backslash? Ad es .: @XMLElement (name = "city \\/town") come ricordo da qualche parte nella documentazione JSON ho visto qualcosa di simile. Se funziona lo posterò come risposta. :) – Mark

+0

Unortunatelly, non funziona. Crea solo entità "città" e "città" di subentità. Ho anche provato a scappare come "città // città" e altro ancora. – stborod

+0

E hai provato solo \ /? (E non \\ /?) –

risposta

1

Invece di moxy U può provare GSON, poiché sta producendo il risultato.

Il POJO è:

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class SubscriberAddress { 
    private String street; 
    private String apartmentNumber; 

    @XmlElement(name = "city/town") 
    private String city; 

    @XmlElement(name = "state/province") 
    private String state; 

    public String getStreet() { 
     return street; 
    } 

    public void setStreet(String street) { 
     this.street = street; 
    } 

    public String getApartmentNumber() { 
     return apartmentNumber; 
    } 

    public void setApartmentNumber(String apartmentNumber) { 
     this.apartmentNumber = apartmentNumber; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public String getState() { 
     return state; 
    } 

    public void setState(String state) { 
     this.state = state; 
    } 
} 

Il JSON generato è:

{ 
    "SubscriberAddress": { 
    "street": "Demo Street", 
    "apartmentNumber": "Demo Apartment", 
    "city/town": "Demo City", 
    "state/province": "Demo State" 
    } 
} 
+1

Ho già lavorato con Jackson. La domanda riguardava la gestione delle barre nel provider moxy. – stborod