根据json生成Java类

1. JSON生成java源码

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

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

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

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

2. 引入依赖

引入唯一的依赖commons-lang

xml 复制代码
<dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.6</version>
    </dependency>

添加plugin

xml 复制代码
<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节点。如:
xml 复制代码
<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

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文件的文件名

java 复制代码
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;
    }

    @Override
    public 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

相关推荐
芒果披萨8 分钟前
El表达式和JSTL
java·el
duration~1 小时前
Maven随笔
java·maven
zmgst1 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
跃ZHD1 小时前
前后端分离,Jackson,Long精度丢失
java
blammmp1 小时前
Java:数据结构-枚举
java·开发语言·数据结构
暗黑起源喵2 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong2 小时前
Java反射
java·开发语言·反射
努力的家伙是不讨厌的2 小时前
解析json导出csv或者直接入库
开发语言·python·json
九圣残炎2 小时前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
wclass-zhengge2 小时前
Netty篇(入门编程)
java·linux·服务器