Подтвердить что ты не робот

Кассовая карта поля Джексона 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

4b9b3361

Ответ 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.