我不清楚杰克逊如何处理绘图领域的大写。如果有人可以提供帮助,我会很感激。
{"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"}:
以上是我的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;
}
......等等
答案 0 :(得分:66)
由于您的setter方法名为setMDReqID(…)
,因为Java命名约定(变量应以小写字母开头),Jackson假定变量名为mDReqID。如果你真的想要一个大写字母,请使用setter上的@JsonProperty annotation(或者 - 对于序列化 - 在getter上),如下所示:@JsonProperty("MDReqID")
。
答案 1 :(得分:7)
在setter上添加@JsonProperty
,与您收到的Json字符串中的属性名称匹配。
@JsonProperty("MDReqID")
public void setMDReqID(String MDReqID) {
this.MDReqID = MDReqID;
}
此外,还会为getter添加@JsonProperty
注释,以使输出以传统格式显示。
@JsonProperty("mDReqID")
public String getMDReqID() {
return MDReqID;
}
您可以根据自己的喜好命名变量。
private String mdReqID;
答案 2 :(得分:2)
您也可以
@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
在类上大写JSON消息中的所有属性名称
答案 3 :(得分:0)
我遇到了同样的问题,尝试了UpperCamelCaseStrategy
后仍然发生了此错误,该策略使我的字段pContent
成为ObjectMapper属性Pcontent
,因为不想为每个字段,只需最后使用gson
代替