zoukankan      html  css  js  c++  java
  • Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES

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

    ================================================= 2020-06-11 =====================补充

    今日又遇到这个错误,没想到3年前 我就研究过 呵呵 厉害了 我自己!!!!

    首先看demo:

    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种解决方法 都可以。
    
    
    
        }
    }

     

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

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

     

  • 相关阅读:
    很久没有写代码日记了。
    Bundle数据类型
    8-18 缓存垃圾清理
    关于 printf
    强制类型转换/隐式类型转换
    JAVA文件扫描(递归)
    字符串
    8-17 安卓内存清理
    【11-29】excel reader
    orale 乱码
  • 原文地址:https://www.cnblogs.com/del88/p/6640865.html
Copyright © 2011-2022 走看看