根据json生成Java类

2 篇文章 0 订阅

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;
    }

    @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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值