Jackson JsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_抛出异常

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_抛出异常_02

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_实体类_03

      1. jsonToBean时,json中有的字段,bean中没有 无法匹配时,忽略此字段,不抛出异常(默认是抛出异常的)
        方案一(局部):在class上加
        @JsonIgnoreProperties(ignoreUnknown = true)
        public class tes

        方案二(局部或全局)或者代码控制
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.readValue(json,cls);1.2.3.4.5.6.7.8.9.

首先看demo:

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_实体类_04

public class TestMain {
    
    
    public static void main(String[] args) throws JsonProcessingException {
    
    

        ObjectMapper objectMapper = new ObjectMapper();

        /*
         1.把一个实体类转换成一个Json 是完全没有问题的,通常不会报错
         */
        UserBase userBase = new UserBase();
        userBase.setUserName("小李飞刀");
        userBase.setAge(18);
        userBase.setAddTime(new Date());
        String json = objectMapper.writeValueAsString(userBase);
        System.out.println(json);//{"userName":"小李飞刀","age":18,"addTime":1591851786568}



        /*
         2.若是把一个json转换成实体类,那么这步可能会报错,首先我们测试 json里字段不全缺失的情况
           缺少addTime字段,你可能已经猜到缺少字段不会引起什么问题。因为 objectMapper.read是
           读json的,一个字段一个字段的读,你缺少自然没有问题
         */
        String json1 = "{\"userName\":\"小李飞刀\",\"age\":18}";
        UserBase userBase1 = objectMapper.readValue(json1, UserBase.class);
        System.out.println(objectMapper.writeValueAsString(userBase1));//{"userName":"小李飞刀","age":18,"addTime":null}



        /*
         3.缺少没有问题,但是若是 json 中有某一个字段,而实体类中没有这个字段,就意味着找不到,他的逻辑是json中读一个字段,然后去
           实体类中寻找这个字段,若找不到就会抛出异常。以下是举例
         */
        String json2 = "{\"userName\":\"小李飞刀\",\"age88\":18}";//把age换成age88
        UserBase userBase2 = objectMapper.readValue(json2, UserBase.class);
        System.out.println(objectMapper.writeValueAsString(userBase2));//这一步就会抛出异常了。
        //2种解决方法 都可以。



    }
}

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_使用场景_05

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_使用场景_06

其实这2种方法 都一般,可以看情况使用,尽量不用,没有必要。主要是要看使用场景。我们用的最多的就是在SpringBoot项目中, HTTP请求 content-type:application/json,时的请求体的Bean类,

因为有些接口的参数,经常发生变化,如增加参数或减少参数,增加参数还好,尤其是减少参数,那么若不忽略掉这个错误,就不行。举例:

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_抛出异常_07

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_字段_08

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_实体类_09

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_实体类_10

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_抛出异常_11

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_使用场景_12

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_抛出异常_13

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES_使用场景_14

猜你喜欢

转载自blog.csdn.net/qq_43842093/article/details/132641468