通常我們java類裏的字段的命名都是按照駝峯規則來的,但是有些不按套路的或者命名不規範的人,就會出現各種奇葩的情況。最近在項目上就遇到了奇葩的幾種情況,一種是類似create_user_id,另一種是PODocNo,還有TotalWeight等。
由於我們是下游系統,要接收上游傳過來的數據,正常情況我們都會按照駝峯規則去建立字段,然後使用JSONObject.parseObject(json,類名.class);方法處理,既簡單又方便,但是本 人卻遇到了奇葩的人寫的代碼,沒有一點代碼規範性,接收到的報文字段上面三種形式的都有,本人又是那種對代碼規範有強迫症的人,不喜歡在類中對字段隨意命名。
接收報文格式例子
String json = "{\"create_user_id\":\"12\",\"SuplierCode\":\"3-9989965\",\"POLine\":\"11122\"}";
處理類:
private String createUserId;
private String suplierCode;
private String PoLine;
public String getSuplierCode() {
return suplierCode;
}
public void setSuplierCode(String suplierCode) {
this.suplierCode = suplierCode;
}
public String getCreateUserId() {
return createUserId;
}
public void setCreateUserId(String createUserId) {
this.createUserId = createUserId;
}
public String getPoLine() {
return PoLine;
}
public void setPoLine(String poLine) {
PoLine = poLine;
}
按照常規方法處理查看結果有些字段賦值沒成功
好在fastjson提供了@JSONField(name="xxxx"),可以作用在字段上,按照自己的方式給字段寫對應的名稱,
看一下這個註解代碼
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
public @interface JSONField {
String name() default "";
String format() default "";
boolean serialize() default true;
boolean deserialize() default true;
SerializerFeature[] serialzeFeatures() default {};
Feature[] parseFeatures() default {};
}
json在解析過程中會判斷有無使用該註解進行解析重命名
所以需要在我們字段上加上@JSONField註解,
@JSONField(name="create_user_id")
private String createUserId;
@JSONField(name="SuplierCode")
private String suplierCode;
@JSONField(name="POLine")
private String PoLine;
public String getSuplierCode() {
return suplierCode;
}
public void setSuplierCode(String suplierCode) {
this.suplierCode = suplierCode;
}
public String getCreateUserId() {
return createUserId;
}
public void setCreateUserId(String createUserId) {
this.createUserId = createUserId;
}
public String getPoLine() {
return PoLine;
}
public void setPoLine(String poLine) {
PoLine = poLine;
}
在查看結果,都賦到值了