Кассовая карта поля Джексона 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"}:
Выше мой json, ниже мое исключение...
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"])
Выше моего исключения, ниже мой класс...
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
Ответы
Ответ 1
Поскольку ваш метод setter имеет имя setMDReqID(…)
, Джексон предполагает, что переменная называется mDReqID из-за соглашений об именах Java (переменные должны начинаться с строчных букв). Если вы действительно хотите, чтобы заглавная буква использовала аннотацию @JsonProperty для сеттера (или - для сериализации - на геттере), например: @JsonProperty("MDReqID")
.
Ответ 2
Добавьте @JsonProperty
в установщик, который соответствует имени свойства в полученной строке Json.
@JsonProperty("MDReqID")
public void setMDReqID(String MDReqID) {
this.MDReqID = MDReqID;
}
Кроме того, добавьте аннотацию @JsonProperty
в получатель, чтобы вывод отображался в обычном формате.
@JsonProperty("mDReqID")
public String getMDReqID() {
return MDReqID;
}
Вы можете назвать свою переменную как хотите.
private String mdReqID;
Ответ 3
Вы также можете сделать
@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
в классе, чтобы использовать все имена свойств в сообщении JSON.