当前位置: 首页 > news >正文

根据json生成Java类

1. JSON生成java源码

体力活干多了, 就会思考怎么来提高效率了.

最近有个项目需要和第三方对接, 生成API实体很多且本质就是体力活.

遂思考: 大佬们应该也有这个困惑. 正所谓“前人栽树后人乘凉”, 只要能描述清楚自己诉求, 往上一搜一大堆.

结合自己的现状, 使用maven插件生成最方便. 下面开始jsonschema2pojo-maven-plugin这个插件的快速入门.


2. 引入依赖

引入唯一的依赖commons-lang

<dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency>

添加plugin

<plugin><groupId>org.jsonschema2pojo</groupId><artifactId>jsonschema2pojo-maven-plugin</artifactId><version>0.4.34</version><configuration><sourceDirectory>${basedir}/src/main/resources</sourceDirectory><targetPackage>com.demo.bean</targetPackage><outputDirectory>${basedir}/src/main/java</outputDirectory><addCompileSourceRoot>false</addCompileSourceRoot><sourceType>json</sourceType><annotationStyle>none</annotationStyle></configuration><executions><execution><goals><goal>generate</goal></goals></execution></executions>
</plugin>

3. 指定目录

configuration配置说明:

主要关注configuration节点下面的配置项:

  • sourceDirectory:json文件所在的目录,会将该目录下所有json进行转换,不支持指定单个文件,如果不想全部转换,可以添加一个excludes节点。如:
<excludes><exclude>init.json</exclude>
</excludes>
  • targetPackage:生成的Java pojo类目标包名。
  • outputDirectory:生成Java pojo类的(根)目录,换句话说,源文件最终目录为此目录+包目录,注意,此值默认为target\java-gen,官方配置中并没有该默认值,如果成功生成后发现找不到源文件,看一看是不是这个原因。
  • addCompileSourceRoot:是否将输出目录作为项目的源码根目录。
  • sourceType:json格式,两个可选值,jsonschema:json模式和json:json文件,默认为jsonschema,不过我们一般是希望直接使用json文件生成,所以指定为json`。
  • annotationStyle:生成的(字段)注解样式,有五个可选值:jackson1jackson2gsonmoshi1none,默认是jackson2,一般指定none就可以了,还有比如用fastjson,那也要指定none

4. 生产源代码

将json数据放到配置的sourceDirectory目录下

orderReq.json

{
"appid": "e3b19c2dcfff49dfa019dced4e4ee9e5",
"personnelId": "2067831",
"saleId": "105198",
"contactMobile": "13900000000",
"number": "17317810524",
"installedAddress": "江苏路500号",
"province": "上海市",
"city": "上海市",
"idCard": "340321000000000000",
"name": "张三",
"county": "长宁区",
"sign": "NTA3ZjVhMTlkMGU0Y2E1MTFkYzRjMzk5OTg4MjI5NTM="
}

直接执行mvn package打包命令就可以进行生成操作了,执行成功后你会在对应的包下面发现生成的java pojo源文件。

生成的Java类名就是json文件的文件名

public class OrderReq {private String appid;private String personnelId;private String saleId;private String contactMobile;private String number;private String installedAddress;private String province;private String city;private String idCard;private String name;private String county;private String sign;private Map<String, Object> additionalProperties = new HashMap<String, Object>();public String getAppid() {return appid;}public void setAppid(String appid) {this.appid = appid;}public String getPersonnelId() {return personnelId;}public void setPersonnelId(String personnelId) {this.personnelId = personnelId;}public String getSaleId() {return saleId;}public void setSaleId(String saleId) {this.saleId = saleId;}public String getContactMobile() {return contactMobile;}public void setContactMobile(String contactMobile) {this.contactMobile = contactMobile;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getInstalledAddress() {return installedAddress;}public void setInstalledAddress(String installedAddress) {this.installedAddress = installedAddress;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getIdCard() {return idCard;}public void setIdCard(String idCard) {this.idCard = idCard;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getCounty() {return county;}public void setCounty(String county) {this.county = county;}public String getSign() {return sign;}public void setSign(String sign) {this.sign = sign;}@Overridepublic String toString() {return ToStringBuilder.reflectionToString(this);}public Map<String, Object> getAdditionalProperties() {return this.additionalProperties;}public void setAdditionalProperty(String name, Object value) {this.additionalProperties.put(name, value);}
}

参考: https://codeantenna.com/a/pO5ix1igdi

相关文章:

  • 关于navigator.userAgent判断苹果手机的问题和踩坑
  • Java中的反射机制
  • 09-MySQL主从复制
  • idea 一直卡在maven正在解析maven依赖
  • asp.net core 生命周期
  • SpringBoot Kafka消费者 多kafka配置
  • 【星海出品】flask(一)demo
  • 【Nginx39】Nginx学习:upstream服务器组模块
  • 教给孩子们如何认真听讲
  • windowCPU虚拟化已禁用解决方案
  • AIX5.3安装weblogic10.3
  • 已解决:rm: 无法删除“/opt/module/zookeeper-3.4.10/zkData/zookeeper_server.pid“: 权限不够
  • 【23真题】简单!原题很多!211!
  • IEC104 工具和代码库
  • 【使用教程】在Ubuntu下PMM60系列一体化伺服电机通过PDO跑循环同步位置模式详解
  • css布局,左右固定中间自适应实现
  • IndexedDB
  • JavaScript-Array类型
  • JavaScript设计模式系列一:工厂模式
  • Js基础——数据类型之Null和Undefined
  • nginx 配置多 域名 + 多 https
  • PHP面试之三:MySQL数据库
  • spring + angular 实现导出excel
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 闭包--闭包之tab栏切换(四)
  • 关于for循环的简单归纳
  • 回顾2016
  • 深入浅出webpack学习(1)--核心概念
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (31)对象的克隆
  • (6)STL算法之转换
  • (floyd+补集) poj 3275
  • (Git) gitignore基础使用
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (rabbitmq的高级特性)消息可靠性
  • (初研) Sentence-embedding fine-tune notebook
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转)ABI是什么
  • (转)linux 命令大全
  • (转)Sql Server 保留几位小数的两种做法
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .cfg\.dat\.mak(持续补充)
  • .mysql secret在哪_MYSQL基本操作(上)
  • .naturalWidth 和naturalHeight属性,
  • .NET Core中的去虚
  • .net 托管代码与非托管代码
  • .NET运行机制
  • .NET中GET与SET的用法