web-dev-qa-db-fra.com

La capitalisation de la cartographie de champ Jackson JSON?

Je ne vois pas comment Jackson aborde la capitalisation dans les domaines de la cartographie. Si quelqu'un pouvait aider, je l'apprécierais. 

{"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"}:

Ci-dessus est mon json, ci-dessous est mon exception ...

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"])

Au-dessus de mon exception, au-dessous de ma classe ...

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;
    }

... etc

27
shaz

Puisque votre méthode de définition est nommée setMDReqID(…), Jackson suppose que la variable s'appelle mDReqID en raison des conventions de dénomination Java (les variables doivent commencer par des lettres minuscules). Si vous voulez vraiment une majuscule, utilisez l’annotation @JsonProperty sur le setter (ou - pour la sérialisation - sur le getter) comme ceci: @JsonProperty("MDReqID").

62
nutlike

Ajoutez @JsonProperty sur le setter qui correspond au nom de la propriété dans la chaîne Json que vous avez reçue.

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

De plus, ajoutez l'annotation @JsonProperty au getter et votre sortie apparaîtra au format conventionnel.

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

Vous pouvez nommer votre variable comme bon vous semble.

private String mdReqID;
6
Gayan Weerakutti

Tu peux aussi faire

@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)

sur la classe pour mettre en majuscule tous les noms de propriétés dans le message JSON

0
Marc Enschede