1. 程式人生 > >將json串轉換為物件時候,出現欄位和屬性不匹配問題

將json串轉換為物件時候,出現欄位和屬性不匹配問題

報錯資訊如下:

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