java自动化测试-接口响应内容处理技巧:json转DTO

背景:某个交易自动化案例需要检查关联系统的交易结果,可以通过接口请求结果来断言。
一般处理是转成json格式一层层获取自己想要的,但这样子很麻烦而且容易记错层级或字段。这里介绍一种非常通用且方便的方式。

假设接口返回数据如下:
{
“itemId”:3454234,
“specification”[{
“id”:234,
“price”:666.66}],
“attribute”[{
“attributeId”:212,
“name”:“中码”
}]
}

json转dto步骤如下:
1、先为里面层数据创建引用dto SpecificationDto 和AttributeDto
2、创建 ItemDto ,引用上述dto
3、把请求结果转成dto

1、先为底层数据创建引用dto SpecificationDto 和AttributeDto

import java.math.BigDecimal;public class SpecificationDto {
private Long id;
private BigDecimal price;
public Long getid(){
return id;
}
public void setId(Long id) {
this.id = id;
}
public BigDecimal getprice() {
return price;
}
public void setprice(BigDecimal price){
this.price = price;
}}
public class AttributeDto {
private Long attributeid; 
private string name;public Long getAttributeId() {
return attributeld;}
public void setAttributeId(Long attributeId) {
this.attributeId = attributeId;}public string getName() {
return name;}
public void setName(String name){
this.name = name;
}}

2、创建 ItemDto ,引用上述dto

import java.util.List;public class ItemDto {
private Long itemId;
private List<SpecificationDto> specification; 
private List<AttributeDto> attribute;public Long.getItemId() {
return itemid;}
public void setId(Long itemid) {
this.itemId = itemId;}public List<specificationDto>getspecification( ){
return specification;}
public void setspecification(List<SpecificationDto>specification){
this.specification=specification;}public List<AttributeDto>getAttribute() {
return attribute; }
public void setAttribute(List<AttributeDto>attribute) {
this.attribute =attribute;
}}

3、把请求结果转成dto

// 将接口返回数据res转成dto
ItemDto itemDto = JSONObject.parse0bject(res.toJSONString()ItenDto.class);
//过滤得到想要的规格数据
Specification specificationList = itenDto.getspecification().stream().filter(dto -> dto.getId().equals("234")).collect(Collectors.tolist());
//汇总统计返回规格的总价
BigDecimal tot = itemDto.getspecification().stream( ).map(dto -> dto.getProdVo1()).reduce(BigDecimal.ZERO,BigDecimal::add);

转dto的好处很多:

  • 代码少,可阅读性友好。
  • 输入xxDto.get会出现提示框,能快捷获取字段,不会出错。非常方便获取第n层的字段。
  • 通过stream api处理列表数据非常方便高效。
  • 如果需要汇总统计,自动转成bigDecimal类型后非常方便计算和统一。
  • 最最能取巧的是,一般开发也需要包装一样结构的dto数据,大部分时候,我们可以不用自己写dto,直接复制开发的文件过来用即可!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Kubernetes】9-Pod控制器

一、什么是 pod 的控制器 Pod控制器&#xff0c;又称之为工作负载&#xff08;workload&#xff09;&#xff0c;是用于实现管理pod的中间层 确保pod资源符合预期状态&#xff1b;pod的资源故障时会进行重启&#xff1b; 当重启策略无效时&#xff0c;则会重新新建pod的资源 二…

一维时间序列信号的小波时间散射变换(MATLAB 2021)

小波散射变换的目的在于获取第一层次的特征信息&#xff0c;即免疫平移、轻微形变的信息。而低通的滤波器能够获取输入信号的概貌&#xff0c;获取反映其整体大尺度特征的信息&#xff0c;以图像为例&#xff0c;由低通滤波器选取的信号对于图像的平移、伸缩、旋转等局部变化有…

Mysql 常用命令 详细大全【分步详解】

1、启动和停止MySQL服务 // 暂停服务 默认 80 net stop mysql80// 启动服务 net start mysql80// 任意地方启动 mysql 客户端的连接 mysql -u root -p 2、输入密码 3、数据库 4、DDL&#xff08;Data Definition Language &#xff09;数据 定义语言, 用来定义数据库对象(数…

[开发|java] java在windows中环境变量配置

系统环境 系统版本&#xff1a;windows10 配置环境变量 配置Java开发环境在Windows系统中通常涉及两个关键环境变量的设置&#xff1a;JAVA_HOME 和 Path。以下是详细的步骤&#xff1a; 设置JAVA_HOME: 打开“控制面板”或通过搜索栏找到“系统”设置。在系统设置中&…

五、身份与访问管理—身份与访问管理基础与访问控制模型(CISSP)

目录 1.访问控制概述 1.1 访问控制步骤 1.2 口令管理(Password Management) 1.3 生物技术(Biometrics)

如何查看当前系统中哪些端口被占用了?

在 Mac 系统中&#xff0c;你可以使用 lsof 命令来查看哪些端口被占用。以下是具体的步骤&#xff1a; 打开终端。输入以下命令并按回车&#xff1a; sudo lsof -i -P -n | grep LISTEN 这个命令会列出所有正在监听的端口以及它们的使用情况。-i 选项表示列出所有网络连接&a…

linux指令-sed

sed 是一个流编辑器&#xff0c;用于对输入流&#xff08;或文件&#xff09;进行基本的文本转换。以下是 sed 命令的详细输出说明文档&#xff1a; 1. 基本语法 sed [OPTIONS]... [SCRIPT] [INPUTFILE...] OPTIONS&#xff1a;可选的命令行选项&#xff0c;如 -i 用于直接修…

空间不够用了怎么办

空间告急啊哥们 整理一下清理空间有用的一些blog吧。 【linux】公共服务器如何清理过多的.cache缓存 linux根目录空间不足&#xff0c;追加空间到根目录下 【linux】linux磁盘空间 目录查看清理 和 文件查看清理

simulink如何配置自动代码生成

simulink如何配置我们的自动代码生成 仿真时间设置我们仿真我们这个模型的一个时间&#xff0c;目前默认它是10秒。如果把它改成“INF”&#xff0c;它就是会一直仿真。 求解器选择&#xff0c;因为我们使用的是嵌入式代码&#xff0c;因此我们一般嵌入式是一个数字量。所以选…

【AI大模型】Transformers大模型库(三):特殊标记(special tokens)

目录​​​​​​​ 一、引言 二、特殊标记&#xff08;special tokens&#xff09; 2.1 概述 2.2 主要功能 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库&#xff0c;为huggingface上数以万计的预训练大模型提供预测、训练等服…

RK3568技术笔记之二 SAIL-RK3568开发板介绍

开发板是我们自己的&#xff0c;后面我用开发板和工控机来做技术笔记。不用多讲。我先把核心板和开发板规格书搬过来&#xff0c;这篇文章里都是自己的知识产权&#xff0c;所以就不标准引用来源了。 先看看核心板的规格书吧。 再来一下开发板的规格书 看完规格书&#xff0c;…

用cocos2d-python绘制游戏开发的新篇章

用cocos2d-python绘制游戏开发的新篇章 第一部分&#xff1a;背景 在游戏开发的世界中&#xff0c;寻找一个强大而灵活的框架至关重要。cocos2d-python是一个Python游戏开发框架&#xff0c;它提供了一套丰富的功能&#xff0c;用于创建2D游戏、图形和交互式应用。基于流行的c…

如何在 Java 中使用 JOptionPane 显示消息对话框

在 Java 开发中&#xff0c;JOptionPane 是一个非常实用的类&#xff0c;可以用来显示各种类型的对话框&#xff0c;例如信息对话框、警告对话框、错误对话框等。今天&#xff0c;我们将深入探讨如何使用 JOptionPane.showMessageDialog 方法来显示消息对话框&#xff0c;以及如…

完美的移动端 UI 风格

完美的移动端 UI 风格

webgl_decals

ThreeJS 官方案例学习&#xff08;webgl_decals&#xff09; 1.效果图 2.源码 <template><div><div id"container"></div></div> </template> <script> // 光线投射相关代码 https://threejs.org/docs/index.html#api/z…

干货满满!Stable Diffusion 从入门到精通之提示词手册,免费分享,自学转行,零基础首选!

Stable Diffusion 技术把 AI 图像生成提高到了一个全新高度&#xff0c;文生图 Text to image 生成质量很大程度上取决于你的提示词 Prompt 好不好。本文从“如何写好提示词”出发&#xff0c;从提示词构成、调整规则和 AIGC辅助工具等角度&#xff0c;对文生图的提示词输入进行…

模式识别涉及的常用算法

一、线性回归 1.算法执行流程&#xff1a; 算法的执行流程可以简述如下&#xff1a; 导入必要的库&#xff1a; 导入NumPy库&#xff0c;用于数值计算。导入Matplotlib库&#xff0c;用于数据可视化。导入Pandas库&#xff0c;用于数据处理&#xff08;尽管在这个例子中&#…

MySQL数据库主从配置

MySQL主从配置 1. 修改数据库my.cnf文件 修改数据库my.cnf文件&#xff0c;在文件中添加如下内容&#xff0c;其中主数据库的server-id必须要比从库的更小。 # 注册集群id server-id101 # 开启二进制日志文件 log-binmysql-bin # 设置日志格式 binlog-formatrow # 开启中继日…

开关电源基本原理1

目录 内容概述 关于电感 认识电感 电感充电 电感储能 电感充电 电感参数 电感放电 利用电感升压 电感电流波形 伏秒法则 电流纹波率 电感电流三种导电模式 电流纹波率与频率的关系 电流纹波率与电感值的关系 电感值与电感体积 电路纹波率r的最优值 电感值与电…

MySql和Oracle表分区

MySql和Oracle表分区 MySQL和Oracle都支持表分区&#xff0c;这是一种数据库管理技术&#xff0c;用于将大型表、索引或索引组织表分解为更小、更易于管理的片段&#xff0c;称为分区。以下是关于MySQL和Oracle分区的详细对比和说明&#xff1a; 分区基本概念以及类型 MySQL…