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
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")
.
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;
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