测试IDEA中几款从Java bean(POJO)得到JSON字符串用于postman请求参数的插件

2023-11-06

测试IDEA中几款从Java bean(POJO)得到JSON字符串用于postman请求参数的插件

一、背景

有时候,我们需要从写好的 Java 类得到 JSON字符串(Java类一般指 DTO/XxxRequest,即 controller 接口用来接收参数的 POJO),用于postman调用接口的时候的入参。

比如,DemoDTO是controller接口的入参,我现在要用postman简单测一下,我怎么样快速得到 json 字符串呢?

@Data
public class DemoDTO {
    private String str1;
    private Integer integer1;
    private Long long1;
    private Boolean bool;
    private Double double1;
    private BigDecimal bigDecimal1;
    private Date javaUtilDate;
    private Timestamp javaSqlTimestamp;

    private List<String> strList;
    private Map<String, String> additionalMap;

    private Sub sub;
    private List<Sub> subList;

    private OuterSub outerSub;
    private List<OuterSub> outerSubs;

    @Data
    public static class Sub {
        private String str1;
        private List<String> strList;
    }
}


@Data
public class OuterSub {
    private String str1;
    private Integer integer1;
}

二、结论

通过 IDEA 的一些插件,可以实现。一般是装了这些插件后,在类上右键选择 convert to JSON 之类的菜单, JSON 字符串便自动保存到剪切板。

如下是一些常见的POJO转JSON字串的插件,以及我试验的插件版本(IDEA是2020.1.3 ultimate)

  • 1)RestfulToolKit-fix(2.0.7,Convert to JSON 等菜单)

    https://plugins.jetbrains.com/plugin/16788-restfultoolkit-fix

    一些嵌套结构无法体现,完全不能用,绝对是要弃用的

  • 2)Java Bean to Json(1.0.7,菜单Convert to JSON

    https://plugins.jetbrains.com/plugin/10336-java-bean-to-json

    建议别用,这款在某些情况下得到的JSON字串也是会有缺少结构

  • 3)POJO to JSON(1.0,作者李大麦,菜单MakeJson

    https://plugins.jetbrains.com/plugin/9686-pojo-to-json

    实测无论任何的嵌套结构都能得到正确的JSON字串(推荐,但遇到循环引用会导致IDEA无响应,且不支持枚举

  • 4)POJO to JSON(1.0.8,作者organics2016,菜单)

    https://plugins.jetbrains.com/plugin/12066-pojo-to-json

    极力推荐,没有硬伤,循环引用会提示错误比较友好,支持枚举

    因为我的idea是2020.1.3,能安装的版本是1.0.8,安装不了更新的插件

如图,箭头从上到下分别是 RestfulToolKit-fix、POJO to JSON(4)Java Bean to Json、POJO to JSON(3)插件的菜单

在这里插入图片描述

三、实践

测试IDEA版本:Mac版,2020.1.3 Ultimate

1)RestfulToolKit-fix(或者RestfulToolKit也可能带有)

插件地址:https://plugins.jetbrains.com/plugin/16788-restfultoolkit-fix

前者是后者的修复版,后者是原作者的版本很久都没更新,有些bug如不能兼容高版本的 IDEA 等。

这个插件本来是用来搜索endpoint的,但是也附带有转 JSON字符串的功能。

在这里插入图片描述

转换的效果:非常不理想,绝对是要弃用的,许多字段在转换过程中丢失了!!!

// javaSqlTimestamp 不见了!!additionalMap不见了!!sub不见了!!outerSub不见了!!丢失了这么多字段!!!
// subList首先解析错误,不是对象,应该是数组,而且subList里的对象丢失了一些字段如strList
{
  "str1": "demoData",
  "integer1": 1,
  "long1": 1,
  "bool": true,
  "double1": 1.0,
  "bigDecimal1": 1,
  "javaUtilDate": "2022-10-27 21:15:00",
  "strList": [
    "demoData"
  ],
  "subList": {
    "str1": "demoData"
  },
  "outerSubs": {
    "str1": "demoData",
    "integer1": 1
  }
}

2)Java Bean to Json (ConvertToJson菜单,使用的版本:1.0.7)

插件地址:https://plugins.jetbrains.com/plugin/10336-java-bean-to-json/versions

在这里插入图片描述

转换的结果:

// 可以看到对子类还是还原得不错,无论是内部类Sub还是外部类OuterSub都能还原,
// 就是对于 private List<Sub> subList; private List<OuterSub> outerSubs; 这类的结构还原得不好,直接结构丢失了
{
  "str1": "",
  "integer1": 0,
  "long1": 0,
  "bool": false,
  "double1": 0.0,
  "bigDecimal1": 0.0,
  "javaUtilDate": "2022-10-27 20:48:38",
  "javaSqlTimestamp": 1666874918458,
  "strList": [
    ""
  ],
  "additionalMap": {},
  "sub": {
    "str1": "",
    "strList": [
      ""
    ]
  },
  "subList": [],
  "outerSub": {
    "str1": "",
    "integer1": 0
  },
  "outerSubs": []
}

补充1:对枚举也能很好识别,得到的样式是将所有的枚举列举出来

{
  "typeEnum1": [
    "TYPE1",
    "TYPE2"
  ]
}

补充2:对于循环引用,不会报错,循环引用的字段被忽略掉,也不会导致IDEA无响应

@Data
public class Stu {
    private String name;
    private Integer age;
    private Stu stu;
}

得到

{
  "name": "",
  "age": 0
}

3)POJO to JSON(MakJson菜单,使用的版本:1.0)

插件地址:https://plugins.jetbrains.com/plugin/9686-pojo-to-json

在这里插入图片描述

转换的结果:

// 可以看到这个插件非常完美地获得了json格式(获取的时候不是 pretty format的,上述是后期用用别的工具格式化的,有点遗憾)
// 难能可贵的是,类型有比较好的提示,如`Map<String, String>`,字符串也用了比较明显的 `"str"`。
{
    "str1": "str",
    "integer1": 0,
    "long1": 0,
    "bool": true,
    "double1": 0,
    "bigDecimal1": "BigDecimal",
    "javaUtilDate": 1666877320450,
    "javaSqlTimestamp": "Timestamp",
    "strList": [
        "str"
    ],
    "additionalMap": "Map<String, String>",
    "sub": {
        "str1": "str",
        "strList": [
            "str"
        ]
    },
    "subList": [
        {
            "str1": "str",
            "strList": [
                "str"
            ]
        }
    ],
    "outerSub": {
        "str1": "str",
        "integer1": 0
    },
    "outerSubs": [
        {
            "str1": "str",
            "integer1": 0
        }
    ]
}

测试它不支持两样东西:

  • 枚举

    遇到枚举类的时候实际会报错,但是表面上没有任何提示(之前转换成功后在IDEA右下角有消息通知),剪切板内容不会更新(还是保留上次的剪切板里的内容。你要注意把上次的剪切板内容稍微改下内容,不然你 “不加枚举字段MakeJson一次,加上枚举再MakeJson一次” 这种场景可能会让你以为只是忽略了枚举字段,即前面那次无枚举正常转换后面那次不正常转换但是保留了上次的剪切板让你以为 “增加枚举字段只是被忽略了”)

    // 不支持枚举
    @Data
    public class Stu {
        private String name;
        private Integer age;
        private TypeEnum typeEnum;
    }
    public enum TypeEnum {
        TYPE1, TYPE2
    }
    
  • 不支持嵌套:我估计实际是报错的,但是没有任何错误提示。最后会导致idea无响应!!!

    @Data
    public class Stu {
        private String name;
        private Integer age;
        private Stu stu;
    }
    

4)POJO to JSON(1.0.8,作者organics2016,菜单)----非常推荐

插件地址:https://plugins.jetbrains.com/plugin/12066-pojo-to-json

转换结果:非常完美!枚举也是支持的,而且循环引用的也会报错提示

{
  "str1": "",
  "integer1": 0,
  "long1": 0,
  "bool": false,
  "double1": 0.00,
  "bigDecimal1": 0.00,
  "javaUtilDate": "2022-10-27 20:48:37",
  "javaSqlTimestamp": "2022-10-27 20:48:37",
  "typeEnum1": "TYPE1",
  "strList": [
    ""
  ],
  "additionalMap": {},
  "sub": {
    "str1": "",
    "strList": [
      ""
    ]
  },
  "subList": [
    {
      "str1": "",
      "strList": [
        ""
      ]
    }
  ],
  "outerSub": {
    "str1": "",
    "integer1": 0
  },
  "outerSubs": [
    {
      "str1": "",
      "integer1": 0
    }
  ]
}

补充1:循环引用

@Data
public class Stu {
    private String name;
    private Integer age;
    private Stu stu;
}

报错并且不会将内容拷贝进剪切板(还是上一次的剪切板内容)

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试IDEA中几款从Java bean(POJO)得到JSON字符串用于postman请求参数的插件 的相关文章

  • SWT:如何进行高质量图像调整大小

    我的应用程序需要调整 ImageData 的大小 不幸的是 我还没有通过 GC 开启抗锯齿和高插值 或 ImageData scaledTo 获得我想要的结果 生成的图像质量太低 无法接受 进行高质量 ImageData 调整大小的最佳方法
  • 单击链接时如何将另一个 JSP 页面注入到

    我在一个JSP页面中有两个不同的部分 其中一个包含链接菜单 单击时 div2 id content 会相应加载不同的页面 我正在做类似的事情 div ul class navbar li a href Login jsp Login a l
  • 如何在 Objective C 中创建 json 字符串?

    我必须动态生成一个 json 字符串并需要发送到服务器 有谁知道如何使用NSJSONSerialization 下面是我的字符串 surveyid Survey1 responsetime dd mm yyyy hh mm ss locat
  • Java JNDI 名称 java:/

    我正在遵循教程 https docs oracle com javase tutorial jndi index html https docs oracle com javase tutorial jndi index html 我的冒险
  • 打印数组时出错

    我得到这个代码 import java util import java io public class Oblig3A public static void main String args OrdAnalyse O new OrdAna
  • 如何在 IdeaVIM 中配置 Vim 的 Ctrl + N 和 Ctrl + P 补全?

    在Vim中我们可以使用Ctrl N or Ctrl P完成代码补全 如何在 IdeaVim for IntelliJ 中配置它 Alt and Alt Shift 既可以在普通 IntelliJ 中工作 也可以在安装了 IdeaVim 的情
  • SQLite 64位整数在jooq中被识别为int

    我有一个与 jOOQ 一起使用的 SQLite 数据库 当我使用 jOOQ 的代码生成工具时 它会按预期构建所有表和记录类 然而 所有的 SQLiteINTEGER列变成java lang Integer生成的代码中的字段 问题是 SQLi
  • 如何使 JFileChooser 仅显示具有某些特定名称 Java 的文件夹

    有什么方法可以让 JFileChooser 加载时仅显示名称为 Hello 的文件夹 这是我的代码 它显示所有文件夹以及扩展名为 py 和 java 的文件 我想添加文件夹名称限制 FileNameExtensionFilter filte
  • Spring Boot - 如何在开发过程中禁用@Cacheable?

    我正在寻找两件事 如何在开发过程中使用 Spring boot dev 配置文件禁用所有缓存 application properties 中似乎没有通用设置可以将其全部关闭 最简单的方法是什么 如何禁用特定方法的缓存 我尝试像这样使用 S
  • 什么会导致“IO错误java.net.SocketException:选择失败”?

    我的笔记本电脑上运行一个服务器程序 相同的路由器和相同的代码 它工作正常 客户端可以连接 然而 当我将工作区复制到我的电脑并运行它时 我得到了这样的废话 IO错误java net SocketException 选择失败 这是代码 publ
  • 使用 Jboss7 加载资源返回 null

    如何使用Jboss7 1从java代码中加载图像等资源 这曾经与 Jboss4 一起使用 this getClass getClassLoader getResourceAsStream myapp includes images imag
  • 如何保存/加载 BigInteger 数组

    我想保存 加载BigInteger数组传入 传出 SharedPreferences 如何做呢 例如对于以下数组 private BigInteger dataCreatedTimes new BigInteger 20 Using Gso
  • 使用 JSON 传递 HTML

    我正在使用 JSON 将数据传递到 iPhone 和 iPad 数据的一个字段是 HTML 问题是编码 这是我得到的回复 gt GadgetHTML strong Hello strong gt from Catworld br n img
  • Maven编译错误:包不存在

    我正在尝试向现有企业项目添加 Maven 支持 这是一个多模块项目 前 2 个模块编译和打包没有问题 但我面临编译错误 我尝试在多个模块中使用相同的依赖项 我的结构是 gt parent gt pom xml gt module 1 gt
  • 如何为用户的活动设置计时器?

    如果用户在 5 小时内停止工作 我需要执行特定的方法 假设用户已登录 但他在 5 小时内没有向数据库的特定表添加任何记录 任何时候用户将记录添加到指定的表中 该特定用户的计时器都应该重置 否则它将继续运行 如果达到 5 小时 应用程序应显示
  • 如何在java中进行多处理,以及预期的速度提升是多少?

    我是一个新手 使用 Java 对 csv 文件进行一些数据处理 为此 我使用 Java 的多线程功能 线程池 将 csv 文件批量导入到 Java 中 并对每一行执行一些操作 在我的四核处理器上 多线程大大加快了处理速度 我很想知道多处理如
  • 旧的和奇异的 JVM 上 java.io.BufferedInputStream 的默认缓冲区大小是多少?

    我一直在为一篇关于以下内容的博客文章进行一些研究java io BufferedInputStream和缓冲区 显然 多年来 默认值已从区区 512 字节增长到 8192 字节 冒昧地 Sun 的 Java 7 实现 甚至在JDK 1 1
  • 每次修改代码时都必须 mvn clean install

    我不是来自 Java 世界 但我必须为我的一个项目深入研究它 我不明白为什么每次修改或更新代码时 都必须 mvn clean install 来调试代码的最新版本 你知道为什么吗 尝试按Ctrl Shift F9 热插拔 有时会有所帮助
  • Encog:BasicNetwork:无需预先构建数据集的在线学习

    我正在尝试使用 encog 库作为强化学习问题的函数逼近器 更准确地说 我正在尝试启动并运行多层感知器 BasicNetwork 由于我的代理将根据我选择的任何 RL 算法以某种方式探索世界 因此我无法预先构建任何 BasicNeuralD
  • Java GridBagConstraints gridx 和 gridy 不工作?

    我正在尝试使用gridx and gridy定位我的按钮的约束 但它们不起作用 如果我改变gridx and gridy变量 什么也没有发生 如果我将填充更改为GridBagConstraints to NONE 仍然不行 我在这里错过了什

随机推荐

  • IO进程线程day8(2023.8.6)

    一 Xmind整理 管道的原理 有名管道的特点 信号的原理 二 课上练习 练习1 pipe 功能 创建一个无名管道 同时打开无名管道的读写端 原型 include
  • 如何让Myeclipse已经关闭掉的项目不显示出来

    一 打开Package Explorer视图 在它的右上角有一个向下的三角图标 2 点击后选择Filters 在弹出的Filter配置窗口中选中 Closed Projects 转载于 https www cnblogs com rensh
  • rabbitmq消息消费失败如何处理

    在介绍消息中间件 MQ 之前 我们先来简单的了解一下 为何要引用消息中间件 例如 在电商平台中 常见的用户下单 会经历以下几个流程 当用户下单时 创建完订单之后 会调用第三方支付平台 对用户的账户金额进行扣款 如果平台支付扣款成功 会将结果
  • electron 自定义标题栏(windows 系统)

    其实没有网上那么麻烦 如果你仅仅只是想去掉标题 还有下面的工具栏 只需要如下配置 const win new BrowserWindow width 800 height 600 titleBarStyle hidden titleBarO
  • 大数据系列——概论

    1 何为大数据 在万物互联的时代 数据每时每刻都在产生 你的手机 笔记本 智能穿戴设备 智能家电等等所有联网的终端设备都在不间断的向云端输送着数据 云端数据呈指数级增长 在过去 受限于人类的计算能力 只能通过随机采样来进行数据分析 分析的结
  • 深度学习实战(十):使用 PyTorch 进行 3D 医学图像分割

    深度学习实战 十 使用 PyTorch 进行 3D 医学图像分割 1 项目简介 2 3D医学图像分割的需求 3 医学图像和MRI 4 三维医学图像表示 5 3D Unet模型 5 1损失函数 Dice Loss 5 2医学成像数据 5 2
  • 常用快捷键整理(centos7、Notepad++、Idea、Excel)

    目录 一 常用快捷键 1 Notepad 常用快捷键 2 centos7快捷键 3 idea快捷键 4 excel 一 常用快捷键 1 Notepad 常用快捷键 1 Ctrl D 复制当前行 2 Ctrl L 删除当前行 3 Ctrl T
  • Python面试经验总结,面试一时爽,一直面试一直爽!

    有伙伴问过我Python面试相关的问题 这里也跟大家总结了一下 跟大家说说我之前的面试经历和心得体会 1 简历制作 我做了两份简历 用两个手机账号 两个简历名字 分别在各个招聘网站投了双份简历 一个是数据分析的简历 一个是web全栈开发的简
  • 软件测试第一阶段:web前端技术基础-9- 测试用例设计方法

    一丶测试用例 测试用例 将要进行的测试工作具体化 并且记录到一个文件中 一般情况下是一个excel 表格 在测试用例中 明确的指定了每一步要做什么操作 期望得到什么结果 测试工作 等程序员完成代码 此时可以进行前期准备工作 也就是编写测试用
  • JS小数点前面的0显示

    使用Java从 oracle数据库中取出0 225的数字时 在前台js页面中显示为 225 有两种方法 1 Java中的类使用string来存储0 225时 会保存为 225 需要在前台使用 js方法parseFloat 转为float类型
  • LF AI & Data基金会执行董事Ibrahim Haddad:加速中的开源人工智能创新与合作

    以人工智能为代表的新一代信息技术正在深刻改变着世界 改变着人类生活 人工智能技术不但能够带来便利 同时也为其带来了不确定 不稳定等诸多挑战 2022年7月21日 由中国开源软件推进联盟主办 赛迪传媒 软件和集成电路 杂志社联合承办 CSDN
  • Windows装机必备——WinRAR2023最新版下载&安装教程

    软件下载 软件 WinRAR 版本 自动更新 语言 简体中文 大小 3 38M 系统要求 Win7及以上 32 64为操作系统 硬件要求 CPU 2 0GHz 内存 2G 或更高 下载通道 百度网盘丨下载链接 链接 https pan ba
  • 使用Prometheus+Grafana监控MySQL

    你还不会监控服务器资源吗 你还不会监控mysql性能吗 但是你看了这篇文章之后我想你应该会了 哈哈哈 就算不会 至少你也知道是个怎么回事 这篇文章就来介绍怎么给自己的服务器系统搭建一个监控平台 要是还不会 请私聊我 哈哈 一 介绍Prome
  • 单片机_第2章 MCS-51单片机的结构及原理

    目录 2 1 MCS 51单片机的结构 2 1 1 MCS 51单片机的内部结构 80C51单片机的内部资源主要包括 CPU Central Processing Unit 2 1 2 MCS 51引脚及功能 封装 80C51单片机的40只
  • base model初始化large model,造成的参数矩阵对不上权重不匹配问题

    先报错没有指定文件 OSError Error no file named pytorch model bin tf model h5 model ckpt index or flax model msgpack found in dire
  • Python环境搭建—Anaconda的安装与使用

    Python安装 Anaconda的安装与使用 Anaconda是一个集成的Python数据科学环境 除了有Python外 还安装了很多用于 数据分析的第三方库 相对于新手来说 相当友好 可以避免安装第三方库的麻烦 1 Anaconda下载
  • Hadoop分布式部署,部署一个namenode和三个datanode

    本文以一主三从部署hadoop为介绍 1 首先克隆原有centos系统 2 nn y 为主 dn1 dn2 dn3为从 都是通过克隆快速完成的 右键管理有克隆 选择完全克隆 3 配置网络集群 设置静态ip 192 168 64 132 19
  • 用 React+Redux+Immutable 做俄罗斯方块

    俄罗斯方块是一直各类程序语言热衷实现的经典游戏 JavsScript的实现版本也有很多 用React 做好俄罗斯方块则成了我一个目标 戳 https chvin github io react tetris 玩一玩 开源地址 https g
  • Linux中确认两份文件内容是否相同的方法:MD5值

    什么是MD5值 MD5 信息摘要算法 一种被广泛使用的密码散列函数 可以产生出一个128位 16字节 的散列值 hash value 用于确保信息传输完整一致 可以说是文件的唯一ID 可以根据MD5值去判断文件是否完整或者两个文件是否完全一
  • 测试IDEA中几款从Java bean(POJO)得到JSON字符串用于postman请求参数的插件

    测试IDEA中几款从Java bean POJO 得到JSON字符串用于postman请求参数的插件 一 背景 有时候 我们需要从写好的 Java 类得到 JSON字符串 Java类一般指 DTO XxxRequest 即 controll