关于jackson的DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES

  先来了解一下DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES这个属性是什么,下面是它的API描述:

Feature that determines whether encountering of unknown properties (ones that do not map to a property, and there is no "any setter" or handler that can handle it) should result in a failure (by throwing a JsonMappingException) or not. This setting only takes effect after all other handling methods for unknown properties have been tried, and property remains unhandled.
Feature is enabled by default (meaning that a JsonMappingException will be thrown if an unknown property is encountered).

大概意思:

  反序列化时,遇到未知属性(那些没有对应的属性来映射的属性,并且没有任何setter或handler来处理这样的属性)时是否引起结果失败(通过抛JsonMappingException异常).此项设置只对那些已经尝试过所有的处理方法之后并且属性还是未处理(这里未处理的意思是:最终还是没有一个对应的类属性与此属性进行映射)的未知属性才有影响。
  此功能默认是启用的(意味着,如果遇到未知属性时会抛一个JsonMappingException)。
举个例子:
  比如一段json字符串是:{"id":null,"username":"你好","passwordXXXX":"123456"},现在想反序列化为一个User对象,User类如下:

public class User {  
    private Long id;  
    private String username;  
    private String password;  
    //setter和getter方法略  
}

  根据上面的字符串,有一个属性passwordXXXX,但User类的属性没有对应的passwordXXXX属性,如果使用这个字符串反序列化为User对象就会抛JsonMappingException异常.但是如果将DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES设为false,那么就会忽略passwordXXXX这个属性的解析.解析的方法如下:

public static <T> T parse(String json, Class<T> clazz,boolean failOnUnknownProperties){  
    ObjectMapper objectMapper = new ObjectMapper();  
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, failOnUnknownProperties);  
    T result=null;  
    try {  
        result=objectMapper.readValue(json, clazz);  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
    return result;  
}

  调用:

String json="{\"id\":null,\"username\":\"你好\",\"passwordXXXX\":\"123456\"}";;  
User result = JSON.parse(json, User.class, false);  
System.out.println(result);

 

文章来源:http://blog.csdn.net/xiejx618/article/details/44653703

posted on 2017-07-22 19:02  bijian1013  阅读(2415)  评论(0)    收藏  举报

导航