首页 > 编程语言 >接口测试-json文件读取报java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to....

接口测试-json文件读取报java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to....

时间:2024-03-04 16:24:06浏览次数:30  
标签:lang java 读取 .... json readValueList pathUrl new objectMapper

问题原因:从json文件中读取的信息为hashMap,与预期(类对象)格式不匹配,无法解析。

问题分析:json文件包含一个json串列表,代表向接口中传递不同的参数组合,通过下面方法读取json文件信息,反序列化成类对象,并把这些赋值的对象进行接口请求参数进行传递。

public  List<T> getReadValuesList(String pathUrl){
try {
if(pathUrl.endsWith("json")){
objectMapper = new ObjectMapper(new JsonFactory());
}else if(pathUrl.endsWith("yaml") | pathUrl.endsWith("yml")){
objectMapper = new ObjectMapper(new YAMLFactory());
}
TypeReference<List<T>> reference = new TypeReference<List<T>>() {};
readValueList = objectMapper.readValue(new File(pathUrl), reference);
} catch (IOException e) {
throw new RuntimeException(e);
}
readValueList.forEach(readValues -> {
System.out.println(readValues.toString());
});
return readValueList;

解决方法:

1 、类对象添加implements Serializable

2、json文件读取方法添加预制类型参数,如下:

public  List<T> getReadValuesList(String pathUrl, TypeReference<List<T>> typeR){
    try {
if(pathUrl.endsWith("json")){
objectMapper = new ObjectMapper(new JsonFactory());
}else if(pathUrl.endsWith("yaml") | pathUrl.endsWith("yml")){
objectMapper = new ObjectMapper(new YAMLFactory());
}
readValueList = objectMapper.readValue(new File(pathUrl), typeR);
} catch (IOException e) {
throw new RuntimeException(e);
}
readValueList.forEach(readValues -> {
System.out.println(readValues.toString());
});
return readValueList;
}
 

3、方法调用:

 

PS:知识加油站:

1、在实现接口自动化的过程中,读取接口请求数据的其中一个方法是json文件的读取,经常会把读取json文件的内容写作一个公共的方法; 

2、java类名后面加尖括号是指如果使用某个类的对象作为参数或返回值时,可以将该类放入尖括号内,这种写法称为“泛型”;

3、类对象打印的样式为:对象名(字段=值,字段=值......); 

     hashmap打印的样式为:{字段=值,字段=值......}

 4、待加强知识点为:泛型 (https://www.bilibili.com/video/BV1Nx4y1Q7uM/?spm_id_from=333.788&vd_source=defc65f9acbd5f4f8cbca5cf1fa93ee0)

 

标签:lang,java,读取,....,json,readValueList,pathUrl,new,objectMapper
From: https://www.cnblogs.com/momoyou/p/18051765

相关文章

  • 使用 Java 在Excel中创建下拉列表
    下拉列表(下拉框)可以确保用户仅从预先给定的选项中进行选择,这样不仅能减少数据输入错误,还能节省时间提高效率。在MSExcel中,我们可以通过“数据验证”提供的选项来创建下拉列表,但如果要在Java程序中通过代码实现这一功能,可能需要借助一些第三方库。本文将分享两种使用免费Java库......
  • JAVA面向对象-第二弹
    Java中,所有的类,都默认直接或者间接继承object封装◆该露的露,该藏的藏◆我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数据的隐藏)◆通常,应禁止直接访问一个对象中数据的实际表示,而应......
  • 黑马程序员JavaWeb学习笔记-过滤器
    过滤器--Filter过滤器Filter快速入门Filter拦截路径过滤器链Filter——流程importcom.alibaba.fastjson.JSONObject;importcom.itheima.pojo.Result;importlombok.extern.slf4j.Slf4j;importorg.springframework.util.StringUtils;importjavax.servlet.*;im......
  • 黑马程序员JavaWeb学习笔记-拦截器
    拦截器--Interceptor--快速入门@Component注解交给ioc容器管理--注册配置拦截器@Configuration注解用来标识当前是Spring当中的一个配置类//Interceptor拦截所有("/**")//Filter拦截所有("/*")//WebConfig需要在包下新建一个config包与controller同级//.excl......
  • 黑马程序员JavaWeb学习笔记-文件上传
    文件上传https://www.bilibili.com/video/BV1m84y1w7Tb/?p=150&spm_id_from=pageDriver&vd_source=62f4901d4d947272c439194b87ec6698当报错500时,服务端出现错误,因为默认最大为1M在application.properties里面修改文件上传的几个函数本地存储Controller层的代码import......
  • 黑马程序员JavaWeb学习笔记-登陆login
    登陆loginlogin是登陆业务方法,mapper接口是持久层,用来操作数据库的,用业务方法名不合适三层架构PostMan测试登陆校验http协议是无状态的,下次请求不会携带上次请求的数据,两次请求是独立的Cookie前后端分离项目中前端页面和后段接口部署在不同的服务器上,所以他们的协议......
  • Javascript Object 中,isExtensible/isSealed/isFrozen 的对比
    目录isExtensibleisSealedisFrozen示意图isExtensibleextensibleobject的定义:theycanhavenewpropertiesaddedtothem,andtheir[[Prototype]]canbere-assigned.Anobjectcanbemarkedasnon-extensibleusingoneofObject.preventExtensions(),Object.seal......
  • 黑马程序员JavaWeb学习笔记-JavaScript
    JavaScript--JavaScript引入方式--书写语法--输出语句window可以省略--变量var特点1:作用域比较大,全局变量特点2:可以重复定义--数据类型原始数据类型相当于java中基础数据类型alert(parseInt("12"));//12alert(parseInt("12A45"));//12alert(parseInt("A4......
  • 黑马程序员JavaWeb学习笔记-HTML
    HTML-新浪新闻HTML格式化代码mac:sheft+option+Fwin:ctrl+alt+L--标题排版<!--文档类型为HTML--><!DOCTYPEhtml><htmllang="en"><head><!--字符集为UTF-8--><metacharset="UTF-8"><!--设置浏览器兼容性-->......
  • 总结的Java知识点集合
    这是我读大学时的Java知识点总结,还不全面,后续会逐渐增加完善。知识点集合实例变量实例变量是指在类中声明的变量,其值是针对类的每个实例而独立存储的。每个类的实例都有自己的一组实例变量,它们的值可以在对象创建时初始化,并在整个对象的生命周期中保持不变或者随着对象的状态而......