Hoofdlettergebruik bij Jackson JSON-veldtoewijzing?

Het is mij niet duidelijk hoe Jackson omgaat met hoofdlettergebruik in kaartvelden. Als iemand zou kunnen helpen, zou ik het op prijs stellen.

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

Boven is mijn json, hieronder is mijn uitzondering…

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

Boven is mijn uitzondering, hieronder is mijn klas…

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

… enzovoort


Antwoord 1, autoriteit 100%

Aangezien uw settermethode setMDReqID(…)heet, neemt Jackson aan dat de variabele de naam mDReqIDheeft vanwege de Java naamgevingsconventies(variabelen moeten beginnen met kleine letters).

Als je echt een hoofdletter wilt, gebruik dan de @JsonPropertyannotatie op de setter(of – voor serialisatie – op de getter) als volgt:

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

Antwoord 2, autoriteit 39%

U kunt ook doen

@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)

op de klasse om alle eigenschapsnamen in het JSON-bericht met een hoofdletter te schrijven


Antwoord 3, autoriteit 16%

Voeg @JsonPropertytoe aan de setter die overeenkomt met de eigenschapsnaam in uw ontvangen JSON-tekenreeks:

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

Voeg bovendien de annotatie @JsonPropertytoe aan de getterzodat uw uitvoer in het conventioneleformaat verschijnt:

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

Nu kunt u uw variabele een naam geven die u maar wilt:

private String mdReqID;

Antwoord 4

Ik heb hetzelfde probleem, nadat ik UpperCamelCaseStrategyheb geprobeerd, maar deze fout deed zich nog steeds voor, de strategie maakte mijn veld Pcontentnaar ObjectMapper-eigenschap Pcontent, omdat u @JsonProperty niet voor elk veld wilt toevoegen, gebruikt u in plaats daarvan eindelijk gson

Other episodes