tutorial - objectmapper java




傑克遜無法識別的領域 (3)

我使用傑克遜將JSON轉換為對像類。

JSON:

{
    "aaa":"111",
    "bbb":"222", 
    "ccc":"333" 
}

對像類:

class Test{
    public String aaa;
    public String bbb;
}

碼:

ObjectMapper mapper = new ObjectMapper();
Object obj = mapper.readValue(content, valueType);

我的代碼拋出像這樣的異常:

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "cccc" (Class com.isoftstone.banggo.net.result.GetGoodsInfoResult), not marked as ignorable

我不想添加一個道具類測試,我只是希望傑克遜轉換的存在值whith也存在於測試。


從Jackson 2.0開始,內部枚舉(DeserializationConfig.Feature)已經被移動到獨立枚舉(DeserializationFeature):

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);


如果您使用的是Jackson 2.0(fasterxml)

ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

預先註意可能導致業務邏輯故障的模型的關鍵變化是重要的。

為了更好地控制應用程序,最好手動處理這個異常。

objectMapper.addHandler(new DeserializationProblemHandler() {

            @Override
            public boolean handleUnknownProperty(DeserializationContext ctxt,
                    JsonParser jp, JsonDeserializer<?> deserializer,
                    Object beanOrClass, String propertyName)
                    throws IOException, JsonProcessingException {

                String unknownField = String.format("Ignoring unknown property %s while deserializing %s", propertyName, beanOrClass);
                Log.e(getClass().getSimpleName(), unknownField);
                return true;
            }
        });

返回true以處理UnrecognizedPropertyException

不要無視默默無聞的領域。





jackson