Jackson解析嵌套类(MismatchedInputException)

具体报错如下

问题描述:Jackson解析嵌套类问题 

调用接口返回json格式的数据,使用Jackson解析参数转换成对象:

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class PixlIdDto implements Serializable {
 
    @JsonIgnore
    private static final long serialVersionUID = -5776690969534186379L;
 
    @JsonProperty("models")
    private List<Models> models;
 
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class Models implements Serializable {
 
        @JsonIgnore
        private static final long serialVersionUID = 9189184337502771734L;
 
        @JsonProperty("medias")
        private List<Medias> medias;
 
        @JsonProperty("code")
        private String code;
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public class Medias implements Serializable {
 
            @JsonIgnore
            private static final long serialVersionUID = 136346277159168673L;
 
            @JsonProperty("mediaZones")
            private List<MediaZones> mediaZones;
            @Data
            @JsonIgnoreProperties(ignoreUnknown = true)
            public class MediaZones implements Serializable {
 
                @JsonIgnore
                private static final long serialVersionUID = 7683892920280290206L;
 
                @JsonProperty("medias")
                private List<MediasInner> medias;
 
                @JsonProperty("name")
                private String name;
                @Data
                @JsonIgnoreProperties(ignoreUnknown = true)
                public class MediasInner implements Serializable {
 
                    @JsonIgnore
                    private static final long serialVersionUID = 8653771742539974404L;
 
                    @JsonProperty("displayOrder")
                    private int displayOrder ;
 
                    @JsonProperty("pixlId")
                    private String pixlId;
                }
            }
        }
    }
}

问题本质为:内部非静态类无法实例化

你需要做两件事:

  • 给内部类前面加上static
  • 给内部类加上默认构造函数

改过后的内部类像这样:

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class PixlIdDto implements Serializable {
 
    @JsonIgnore
    private static final long serialVersionUID = -5776690969534186379L;
 
    @JsonProperty("models")
    private List<Models> models;
 
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    @NoArgsConstructor
    public static class Models implements Serializable {
 
        @JsonIgnore
        private static final long serialVersionUID = 9189184337502771734L;
 
        @JsonProperty("medias")
        private List<Medias> medias;
 
        @JsonProperty("code")
        private String code;
 
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        @NoArgsConstructor
        public static class Medias implements Serializable {
 
            @JsonIgnore
            private static final long serialVersionUID = 136346277159168673L;
 
            @JsonProperty("mediaZones")
            private List<MediaZones> mediaZones;
 
            @Data
            @JsonIgnoreProperties(ignoreUnknown = true)
            @NoArgsConstructor
            public static class MediaZones implements Serializable {
 
                @JsonIgnore
                private static final long serialVersionUID = 7683892920280290206L;
 
                @JsonProperty("medias")
                private List<MediasInner> medias;
 
                @JsonProperty("name")
                private String name;
 
                @Data
                @JsonIgnoreProperties(ignoreUnknown = true)
                @NoArgsConstructor
                public static class MediasInner implements Serializable {
 
                    @JsonIgnore
                    private static final long serialVersionUID = 8653771742539974404L;
 
                    @JsonProperty("displayOrder")
                    private int displayOrder;
 
                    @JsonProperty("pixlId")
                    private String pixlId;
                }
            }
        }
    }
}

问题完美解决。

Jackson处理嵌套Json数据

数据 ------》打印每条数据

{
  "ID": 10001,
  "detail": "detail",
  "json_format_version": 1.0,
  "other_info": {
    "array_one": [
      [855, 410],
      [854, 411],
      [847, 411],
      [846, 410],
      [845, 410],
      [844, 409]
    ],
    "array_two": [
      [832, 303],
      [829, 303],
      [828, 302],
      [825, 302],
      [824, 301]
    ],
    "array_three": [
      [1013, 224],
      [1012, 225],
      [1010, 225],
      [1009, 226],
      [1023, 224]
    ],
    "point": [853, 310],
    "boolean": true
  }
}

代码

public class Test {
    public static void main(String[] args) throws IOException {
//        File file = new File("src/main/resources/doc/windABC.json");
//        FileInputStream fip = new FileInputStream(file);
        BufferedReader br = new BufferedReader(new FileReader("src/main/resources/doc/resource.json"));
        ObjectMapper mapper = new ObjectMapper();
        //读取json的节点
        JsonNode node = mapper.readTree(br);
        //获取所有的key
        Iterator<String> keys = node.fieldNames();

        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("src/main/resources/doc/result.txt"));
        bufferedWriter.write("项目:**********\t\t");
        bufferedWriter.write("部门:**********\t\t");
        bufferedWriter.write("工号:**********\n");

        while (keys.hasNext()) {
            String key = keys.next();
            bufferedWriter.write(key   ":");
            bufferedWriter.newLine();
            if (key.equals("other_info")) {
                JsonNode other_infoNode = mapper.readTree(node.get(key).toString());
                Iterator<String> other_info_Key = other_infoNode.fieldNames();
                for (JsonNode jsonNode : other_infoNode) {
                    bufferedWriter.write(other_info_Key.next().toString()    ":\n");
                    isArrayNode(jsonNode,mapper,bufferedWriter);
                }
            } else {
                bufferedWriter.write(node.get(key).asText());
                bufferedWriter.newLine();
            }
            bufferedWriter.newLine();

        }
        bufferedWriter.close();
        br.close();
    }

    public static void isArrayNode(JsonNode jsonNode,ObjectMapper mapper,BufferedWriter bufferedWriter) throws IOException {
        if (jsonNode.isArray()) {
            for (JsonNode node1 : jsonNode) {
                isArrayNode(node1,mapper,bufferedWriter);//递归调用,判断是否数组嵌套数组
            }
            bufferedWriter.newLine();
        }else {
           bufferedWriter.write(jsonNode.asText());
           bufferedWriter.newLine();
        }
    }
}

输出结果

项目:********        部门:********        工号:********
ID:
10001

detail:
detail

json_format_version:
1.0

other_info:
array_one:
855
410

854
411

847
411

846
410

845
410

844
409


array_two:
832
303

829
303

828
302

825
302

824
301


array_three:
1013
224

1012
225

1010
225

1009
226

1023
224


point:
853
310

boolean:
true

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。

解决Jackson解析嵌套类问题(MismatchedInputException)的更多相关文章

  1. 解决Jackson解析嵌套类问题(MismatchedInputException)

    这篇文章主要介绍了解决Jackson解析嵌套类问题(MismatchedInputException),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. 利用Jackson解析JSON的详细实现教程

    JSON对于开发者并不陌生,如今的WEB服务等都是以JSON作为数据交换的格式。学习JSON格式的操作工具对开发者来说是必不可少的。本文将介绍如何使用Jackson开源工具库对JSON进行常见操作,需要的可以参考一下

  3. Jackson中json格式的字符串与对象的互相转换方式

    这篇文章主要介绍了Jackson中json格式的字符串与对象的互相转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  4. jackson解析json字符串,首字母大写会自动转为小写的方法

    下面小编就为大家分享一篇jackson解析json字符串,首字母大写会自动转为小写的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  5. Kotlin密封类Jackson在记忆中的不同位置

    最近,我开始使用Kotlin,在使用Spring测试JSON映射时遇到了一些奇怪的行为value=插孔集成测试$SealedObject@6727e0cd<-------------结果(弹簧)=千斤顶集成测试$SealedObject@6727e0cd<;-----相同内存位置结果测试=插孔集成测试$SealedObject@3c8e3f98正如您所看到的,spring-objectmapper返回的值在内存中具有与基值相同的引用。但自己创建的objectmapper返回的对象在内存中的不同位置

  6. Spring Boot请求体中DTO的严格验证

    缺少什么?

  7. Jackson多态序列化图文详解

    jackson允许配置多态类型处理,当进行反序列话时,JSON数据匹配的对象可能有多个子类型,为了正确的读取对象的类型,我们需要添加一些类型信息,下面这篇文章主要给大家介绍了关于Jackson多态序列化的相关资料,需要的朋友可以参考下

  8. ajax json异步springmvc http请求返回状态码为406的解决

    是因为缺少json相关jar包,网上很多人只是给出了前两个jar,其实不全,依旧406,应该给出四个

  9. ssm 下 前端ajax 访问后台 以及出现的错误

    前端使用AJax发送数据到后台,后台接受数据上代码:maven:在Spring配置文件下添加Json前端使用Jaon需要添加JQueryJSP页面添加jQyery准备完成,开始ajax一个简单的表单使用jQuery可能出现的错误有时候因为没有log信息,不知道是什么错,浏览器只是出现一个白页面,没有内容,那么就打开浏览器的控制台(火狐的是F12),查看网络信息,看一下HTTP错误1,415unsu

  10. ajax六使用 Jackson

    2.可以在类的getter方法上添加注解@JsonIgnore,在转为JSON对象时以忽略该属性。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部