2013-03-08 23 views
18

Nie wiem, jak jackson radzi sobie z użyciem wielkich liter w mapowaniu pól. Jeśli ktokolwiek mógłby pomóc, to byłbym wdzięczny.Mapowanie pola Jackson JSON?

{"user":{"username":"[email protected]","password":"pwd","sendercompid":"COMPID","service":{"host":"address","port":6666,"service":"S1","serviceAsString":"s1"}},"MDReqID":"ghost30022","NoRelatedSym":1,"Symbol":["GOOG"],"MarketDepth":"0","NoMDEntryTypes":3,"MDEntryType":["0","1","2"],"SubscriptionRequestType":"1","AggregatedBook":"N"}: 

Powyżej jest mój json, poniżej jest moja wyjątek ...

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "MDReqID" (class com.myco.qa.fixrest.MarketDataRequest), not marked as ignorable (10 known properties: , "mdreqID", "marketDepth", "user", "subscriptionRequestType", "aggregatedBook", "mdentryType", "symbol", "mdupdateType", "noRelatedSym", "noMDEntryTypes"]) 

powyżej jest moja wyjątkiem, poniżej jest moja klasa ...

public class MarketDataRequest { 
    private User user; 
    private String MDReqID; 
    private char SubscriptionRequestType; 
    private int MarketDepth; 
    private int MDUpdateType; 
    private char AggregatedBook; 
    private int NoMDEntryTypes; 
    private ArrayList<Character> MDEntryType; 
    private int NoRelatedSym; 
    private ArrayList<String> Symbol; 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

    public String getMDReqID() { 
     return MDReqID; 
    } 

    public void setMDReqID(String MDReqID) { 
     this.MDReqID = MDReqID; 
    } 

    public char getSubscriptionRequestType() { 
     return SubscriptionRequestType; 
    } 

    public void setSubscriptionRequestType(char subscriptionRequestType) { 
     SubscriptionRequestType = subscriptionRequestType; 
    } 

... et cetera

Odpowiedz

50

Ponieważ twoja metoda setera nazywa się setMDReqID(…) Jackson zakłada, że ​​zmienna ma nazwę mDReqID z powodu nazwy Java g konwencje (zmienne powinny rozpoczynać się małymi literami). Jeśli naprawdę chcesz wielką literę, użyj @JsonProperty annotation na setera (lub - dla serializacji - na pobierającym) w ten sposób: @JsonProperty("MDReqID").

+4

Muchos gracias amigo. – shaz

3

Dodaj @JsonProperty na setera, który pasuje do nazwy właściwości w odebranym ciągu Json.

@JsonProperty("MDReqID") 
public String setMDReqID(String MDReqID) { 
     this.MDReqID = MDReqID; 
} 

Dodatkowo dodać @JsonProperty adnotację do getter także na swoją moc do stawienia się w tradycyjnym formacie.

@JsonProperty("mDReqID") 
public void getMDReqID() { 
     return MDReqID; 
} 

Możesz nazwać swoją zmienną, jak wolisz.

private String mdReqID; 
Powiązane problemy