schema2java-jsonschema2pojo使用

news/2024/5/21 4:41:43

从Schema生成代码:https://github.com/joelittlejohn/jsonschema2pojo
https://github.com/frx08/jsonschema2popo
https://www.libhunt.com/compare-jsonschema2pojo-vs-mvn-golang

请教了大佬的文档:jsonschema2pojo - 二次封装(基于json内容生成JavaBean代码)-CSDN博客

引入依赖

<dependency><groupId>org.jsonschema2pojo</groupId><artifactId>jsonschema2pojo-core</artifactId><version>1.1.1</version>
</dependency>

代码开发

工具类

import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.StrUtil;
import Json2PojoCodeGeneratorConfig;
import Jsonschema2pojoConfig;
import com.sun.codemodel.JCodeModel;
import lombok.SneakyThrows;
import org.jsonschema2pojo.SchemaMapper;import java.io.File;
import java.nio.file.Files;/*** 静态封装方便使用*/
public class Json2PojoCodeGeneratorUtil {@SneakyThrowspublic static File json2pojoFile(String jsonContent) {return json2pojoFile(jsonContent, "TestBean", ClassUtil.getPackage(Json2PojoCodeGeneratorUtil.class));}@SneakyThrowspublic static File json2pojoFile(String jsonContent, String pojoClassName, String pojoPackageName) {return json2pojoFile(Json2PojoCodeGeneratorConfig.builder().jsonContent(jsonContent).pojoClassName(pojoClassName).pojoPackageName(pojoPackageName).build());}/*** json内容转成Bean代码 生成文件夹** @param json2PojoGenerateConfig 配置信息*/@SneakyThrowspublic static File json2pojoFile(Json2PojoCodeGeneratorConfig json2PojoGenerateConfig) {String jsonContent = json2PojoGenerateConfig.getJsonContent();String pojoClassName = StrUtil.blankToDefault(json2PojoGenerateConfig.getPojoClassName(), "TestBean");String pojoPackageName = StrUtil.blankToDefault(json2PojoGenerateConfig.getPojoPackageName(), ClassUtil.getPackage(Json2PojoCodeGeneratorUtil.class));// 1. 生成配置设置SchemaMapper mapper = Jsonschema2pojoConfig.getDefaultSchemaMapper();JCodeModel codeModel = new JCodeModel();mapper.generate(codeModel, pojoClassName, pojoPackageName, jsonContent);// 2. 开始生成代码File required = Files.createTempDirectory("required").toFile();codeModel.build(required);// 3. 生成压缩文件return required;}
}

pojo代码生成配置类


import cn.hutool.core.util.URLUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;/*** 配置类*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Json2PojoCodeGeneratorConfig {/*** 用于解析成Bean的json内容* 待解析的json内容(jsonContent)*/String jsonContent;/*** 结果Bean的类名* 不设置则为【TestBean】* 生成的Bean的类名(pojoClassName)*/String pojoClassName;/*** 结果Bean的包名* 不设置则使用工具类默认包名* 生成的Bean的报名(pojoPackageName)*/String pojoPackageName;/*** 解码*/public void setJsonContent(String jsonContent) {this.jsonContent = URLUtil.decode(jsonContent);}
}

pojo注解生成配置类

import org.jsonschema2pojo.AnnotationStyle;
import org.jsonschema2pojo.DefaultGenerationConfig;
import org.jsonschema2pojo.GenerationConfig;
import org.jsonschema2pojo.InclusionLevel;
import org.jsonschema2pojo.SchemaGenerator;
import org.jsonschema2pojo.SchemaMapper;
import org.jsonschema2pojo.SchemaStore;
import org.jsonschema2pojo.SourceType;
import org.jsonschema2pojo.rules.RuleFactory;/*** 注解控制配置类*/
public class Jsonschema2pojoConfig {/*** 总体配置** @param includeGetAndSetFlag 是否需要get\set代码*/public static GenerationConfig getGenerationConfig(boolean includeGetAndSetFlag) {return new DefaultGenerationConfig() {@Overridepublic boolean isIncludeAllPropertiesConstructor() {return false;}@Overridepublic SourceType getSourceType() {return SourceType.JSONSCHEMA;}@Overridepublic boolean isGenerateBuilders() { // set config option by overriding methodreturn false;}@Overridepublic AnnotationStyle getAnnotationStyle() {return AnnotationStyle.NONE;}@Overridepublic boolean isIncludeAdditionalProperties() {return false;}@Overridepublic boolean isIncludeGetters() {return includeGetAndSetFlag;}@Overridepublic boolean isIncludeSetters() {return includeGetAndSetFlag;}@Overridepublic boolean isIncludeToString() {return false;}@Overridepublic boolean isSerializable() {return true;}@Overridepublic boolean isIncludeGeneratedAnnotation() {return false;}@Overridepublic boolean isIncludeHashcodeAndEquals() {return false;}@Overridepublic String getTargetVersion() {return "1.8";}@Overridepublic InclusionLevel getInclusionLevel() {return InclusionLevel.ALWAYS;}};}public static GenerationConfig getGenerationConfig() {return getGenerationConfig(false);}/*** 生成的注解配置*/public static AbstractTypeInfoAwareAnnotator getAnnotator(GenerationConfig generationConfig) {return new AbstractTypeInfoAwareAnnotator(generationConfig);}/*** 自定义总体配置+注解配置*/public static SchemaMapper getSchemaMapper(GenerationConfig config, AbstractTypeInfoAwareAnnotator myAbstractTypeInfoAwareAn) {return new SchemaMapper(new RuleFactory(config, myAbstractTypeInfoAwareAn, new SchemaStore()), new SchemaGenerator());}/*** 默认总体配置+注解配置*/public static SchemaMapper getDefaultSchemaMapper() {GenerationConfig generationConfig = getGenerationConfig();AbstractTypeInfoAwareAnnotator annotator = getAnnotator(generationConfig);return getSchemaMapper(generationConfig, annotator);}}


http://www.mrgr.cn/p/03506871

相关文章

【IDEA神器插件推荐】国产崛起!地表最强API测试插件

1.前言 在开发SpringBoot网站应用的过程中,前端后端会对接口进行请求测试。相信很多小伙伴都用过Postman,但是在IDE和Postman切换难免令人心烦。所以今天给大家带来一款IDEA内置的接口测试插件。 2.简介 根据插件的简介:Restful Fast Request 是一个类似于 Postman 的 Intel…

京东手势验证码-YOLO姿态识别+Bézier curve轨迹拟合

这次给老铁们带来的是京东手势验证码的识别。 目标网站&#xff1a;https://plogin.m.jd.com/mreg/index 验证码如下图: 当第一眼看到这个验证码的时候&#xff0c;就头大了&#xff0c;这玩意咋识别&#xff1f;&#xff1f;&#xff1f; 静下心来细想后的一个方案&#xf…

django显示网页步骤

显示网页步骤 小白的django学习笔记 2024/5/6 8:30 文章目录 显示网页步骤创建输入框&#xff08;文本、单选、多选&#xff09;效果如何在django中显示网页写函数配置地址运行&#xff0c;要选择这个工程名的&#xff0c;使用socket复制ip&#xff0c;后面在加上名字,成功&…

linux安装python3.8

一、卸载损坏的yum并安装 本来想直接下载安装python3.8,结果过程中损坏了yum,导致yum无法使用。 参考了【故障】6、yum不可用_yum命令无法使用-CSDN博客 1、删除python #删除现有的python rpm -qa|grep python|sudo xargs rpm -ev --allmatches --nodeps #强制删除已安装程…

2024好用的网页客服系统推荐?

2024好用的网页客服系统推荐&#xff1f;Zoho SalesIQ是一款强大的实时聊天工具&#xff0c;专为网站和在线商店设计。它提供了一套全面的功能&#xff0c;帮助企业实时解决客户问题&#xff0c;提高转化率和客户满意度。 实时监控 Zoho SalesIQ能够实时监控网站的访问者活动&…

Spring添加注解读取和存储对象

5大注解 Controller 控制器 Service 服务 Repository 仓库 Componet 组件 Configuration 配置 五大类注解的使用 //他们都是放在同一个目录下&#xff0c;不同的类中 只不过这里粘贴到一起//控制器 Controller public class UserController {public void SayHello(){System.ou…

智启蒸汽时代:数字孪生锅炉的革新之旅

数字孪生,就是通过数字技术为物理世界中的物体创建一个数字化的“双胞胎”。对于蒸汽工厂锅炉来说,数字孪生系统能够实时模拟锅炉的运行状态,预测可能出现的问题,并通过数据分析和智能决策为工人提供精准的操作建议。在飞速发展的工业4.0时代,数字孪生技术已经深入到我们生…

python数据分析——数据预处理

数据预处理 前言一、查看数据数据表的基本信息查看info&#xff08;&#xff09;示例 查看数据表的大小shape&#xff08;&#xff09;示例 数据格式的查看type()dtype&#xff08;&#xff09;dtypes&#xff08;&#xff09;示例一示例二 查看具体的数据分布describe()示例 二…

35岁自学编程有必要吗

在当今这个快速发展的数字化时代&#xff0c;学习编程已经不再局限于特定年龄层。对于35岁的人来说&#xff0c;自学编程不仅有必要&#xff0c;而且可能开启职业生涯的全新篇章。首先&#xff0c;编程技能是通往高科技行业的一把钥匙&#xff0c;能够为个人职业发展拓宽道路&a…

服务器(Linux系统)清除缓存

echo 1> /proc/sys/vm/drop_caches -- 清空系统缓存; cat /proc/29127/status -- 查看指定进程的状态信息;

Oracle Linux环境执行脚本

executeOracleSql.sh #!bin/bash# system:oracle的用户名;xxx:oracle的密码 # 后面追加要执行的sql脚本路径即可 sqlplus -s system/oracle@127.0.0.1:1521/xxx <<EOF @/home/mjtabu/basedb_init.sql exit; EOFecho "Please double check!!!";I have a dream…

js实现复制功能

/*** 复制* param {*} val 要复制的内容* returns*/ export const copyToClipboard async val > {try {// 使用现代 API 尝试复制if (navigator.clipboard && navigator.permissions) {await navigator.clipboard.writeText(val)return // 如果成功&#xff0c;直接…

kafka的名词解释

1.Replica(副本):在 Kafka 中,每个分区都有多个副本,用于提供数据的冗余备份和高可用性。副本可以分为两种类型:领导者副本(leader replica)和追随者副本(follower replica)。 领导者副本:每个分区都有一个领导者副本,它负责处理与客户端的所有读写请求,是分区的主…

vue3打开页面后文本框自动获得焦点

字符串写法 <script setup> import { ref, onMounted } from vue import ./index.cssconst input ref(null)onMounted(() > {input.value.focus() }) </script><template><div class"m-home-wrap"><input ref"input" />…

FPGA+炬力ARM实现VR视频播放器方案,3D眼镜显示

3D眼镜显示&#xff1a; FPGA炬力ARM方案&#xff0c;单个视频源信号&#xff0c;同时驱动两个LCD屏显示&#xff0c;实现3D 沉浸式播放 客户应用&#xff1a;VR视频播放器 主要功能&#xff1a; 1.支持多种格式视频文件播放 2.支持2D/3D 效果实时切换播放 3.支持TF卡/U盘文…

亚信安慧AntDB:解锁数智化的新时代

亚信安慧AntDB的融合实时的特性使得它在数据库领域独树一帜。传统的数据库系统往往只能追求数据的准确性和一致性&#xff0c;但在实际的业务场景中&#xff0c;这些特性并不能满足企业的需求。AntDB的出现打破了传统束缚&#xff0c;为企业带来了全新的数据处理方式&#xff0…

计算机基础-网络

一、网络设备 a.网卡(无线、有线) 物理层:提供物理地址,也叫MAC地址 b.网线(双绞线)、光缆 c.交换机、集线器 arp链路层:提供局域网内计算机与路由器之间建立端口映射,mac与IP的链路绑定 d.路由器 网络层:为局域网内计算机分配IP地址、防火墙、上网限制、网速控制登录 …

压力测试

压力测试压力测试 本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/18184743

预约咨询小程序源码搭建/部署/上线/运营/售后/更新

包含在线咨询、视频咨询、电话咨询、面询多种咨询方式&#xff0c;适用于心理、法律、宠物等预约咨询问诊场景 分类预览&#xff1a;小程序提供清晰的分类选项&#xff0c;使用户能够迅速找到所需的咨询服务类型&#xff0c;如法律咨询、心理咨询、医疗咨询等。预约时间选择&a…

实验四

一、实验题目 :代码审查 二、实验目的 1、熟悉编码风格,利用开发环境所提供的平台工具对代码进行自动格式审查; 2、根据代码规范制定代码走查表,并按所制定的审查规范互审代码。 三、实验内容 1、IDEA环境和PyCharm环境二选一; IDEA环境 (1)预先准备在IDEA环境下实现对输…