YET*_*ETI 39 java json jackson
我使用jackson将JSON转换为Object类.
JSON:
{
"aaa":"111",
"bbb":"222",
"ccc":"333"
}
Run Code Online (Sandbox Code Playgroud)
对象类:
class Test{
public String aaa;
public String bbb;
}
Run Code Online (Sandbox Code Playgroud)
码:
ObjectMapper mapper = new ObjectMapper();
Object obj = mapper.readValue(content, valueType);
Run Code Online (Sandbox Code Playgroud)
我的代码抛出异常:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "cccc" (Class com.isoftstone.banggo.net.result.GetGoodsInfoResult), not marked as ignorable
Run Code Online (Sandbox Code Playgroud)
而且我不想为类Test添加一个道具,我只想让jackson转换存在的值,而测试中也存在.
Pro*_*uce 80
Jackson提供了一些不同的机制来配置"额外"JSON元素的处理.以下是配置ObjectMapper
to not 的示例FAIL_ON_UNKNOWN_PROPERTIES
.
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonFoo
{
public static void main(String[] args) throws Exception
{
// { "aaa":"111", "bbb":"222", "ccc":"333" }
String jsonInput = "{ \"aaa\":\"111\",
\"bbb\":\"222\",
\"ccc\":\"333\" }";
ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD,
Visibility.ANY);
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
Test test = mapper.readValue(jsonInput, Test.class);
}
}
class Test
{
String aaa;
String bbb;
}
Run Code Online (Sandbox Code Playgroud)
有关其他方法,请参阅http://wiki.fasterxml.com/JacksonHowToIgnoreUnknown
Owe*_*ing 40
从Jackson 2.0开始,内部枚举(DeserializationConfig.Feature)已移至独立枚举(DeserializationFeature):
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Aal*_*iry 18
如果你使用的是Jackson 2.0(更快的xml)
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
Run Code Online (Sandbox Code Playgroud)
重要的是事先注意到可能导致业务逻辑崩溃的模型的关键变化.
为了更好地控制应用程序,最好手动处理此异常.
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;
}
});
Run Code Online (Sandbox Code Playgroud)
返回true以处理UnrecognizedPropertyException
不要忽略静默无法识别的字段.
归档时间: |
|
查看次数: |
78855 次 |
最近记录: |