將json串轉換為物件時候,出現欄位和屬性不匹配問題
阿新 • • 發佈:2018-11-11
報錯資訊如下:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "HPYS" (Class com.traffic.entity.BusBaseInfo), not marked as ignorable
解決方案:
一:我採用的方案
1、請求的JSON裡面欄位多餘對映的實體類,可以通過在類的頂部新增@JsonIgnoreProperties,2.0版本引入 import org.codehaus.jackson.annotate.JsonIgnoreProperties;
解決程式碼如下:
@Table(name="tb_item_cat") //只使用table註解,與表格對應時,預設對應於類名相同的駝峰對映結果的表名
//ItemCat-->itemCat表格
@JsonIgnoreProperties(ignoreUnknown = true)
public class ItemCat extends BasePojo
二:
屬性大小寫問題,如下 屬性全部大寫,JackSon 預設是通過駝式命名法 處理 比如 nickName 這樣兒,有時比較特殊,比如映入其他系統的欄位,可能都是大寫,
可以通過@JsonProperty(value = “HPHM”)處理
/** 車牌號碼 */
@JsonProperty(value = "HPHM")
private String HPHM;
/** 車牌顏色 */
@JsonProperty(value = "HPYS")
private String HPYS;
/** 車輛顏色 */
@JsonProperty(value = "CSYS")
private String CSYS;
/** 車輛型別 */
@JsonProperty(value = "CLLX")
private Integer CLLX;
三:
重寫ObjectMapper 物件的 PropertyNamingStrategy方法 列子如下,但是不太建議,會出現不統一的問題,如果有統一規則可以使用。
final ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy() {
private static final long serialVersionUID = 1L;
// 反序列化時呼叫
@Override
public String nameForSetterMethod(MapperConfig<?> config,
AnnotatedMethod method, String defaultName) {
return method.getName().toUpperCase();
}
// 序列化時呼叫
@Override
public String nameForGetterMethod(MapperConfig<?> config,
AnnotatedMethod method, String defaultName) {
return method.getName().toUpperCase();
}
});