杰克逊JSON字段映射大写?

sha*_*haz 37 java json jackson

我不清楚杰克逊如何处理绘图领域的资本化.如果有人可以提供帮助,我会很感激.

{"user":{"username":"user@host.com","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"}:
Run Code Online (Sandbox Code Playgroud)

上面是我的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"])
Run Code Online (Sandbox Code Playgroud)

以上是我的例外,下面是我的班级......

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;
    }
Run Code Online (Sandbox Code Playgroud)

......等等

nut*_*ike 76

由于您的setter方法名为setMDReqID(…)Jackson,因此假定变量名为mDReqID,因为Java命名约定(变量应以小写字母开头).如果你真的想要一个大写字母,请在setter上使用@JsonProperty注释(或者 - 对于序列化 - 在getter上),如下所示:mDReqID.


Gay*_*tti 13

添加@JsonProperty与您收到的Json字符串中的属性名称匹配的setter.

@JsonProperty("MDReqID")
public void setMDReqID(String MDReqID) {
    this.MDReqID = MDReqID;
}
Run Code Online (Sandbox Code Playgroud)

另外@JsonProperty,为getter 添加注释以及输出以常规格式显示.

@JsonProperty("mDReqID")
public String getMDReqID() {
    return MDReqID;
}
Run Code Online (Sandbox Code Playgroud)

您可以根据自己的喜好命名变量.

private String mdReqID;
Run Code Online (Sandbox Code Playgroud)


Mar*_*ede 10

你也可以

@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
Run Code Online (Sandbox Code Playgroud)

类上以大写JSON消息中的所有属性名称

  • 文档说:“PropertyNamingStrategy.UpperCamelCaseStrategy.class”已弃用。“自 2.12 起,改用 `PropertyNamingStrategies.UpperCamelCaseStrategy`(有关弃用原因,请参阅:https://github.com/FasterXML/jackson-databind/issues/2715)” (5认同)
  • 我们不想只在 1 个属性上对所有属性执行操作 (4认同)
  • 如果找不到“UpperCamelCaseStrategy”,请尝试“@JsonNaming(PropertyNamingStrategy.PascalCaseStrategy.class)”,它来自“com.fasterxml.jackson.databind.PropertyNamingStrategy” (2认同)