java 生成客户端代码_swagger-codegen生成java客户端代码

前后端分离的时候,需要建立契约,Swagger可达到该目的(略)。

建立Rest接口后,通过swagger-codegen项目可以自动生成对应的客户端代码(c++、php、java、js、node等等),

关于swagger-codegen项目的使用,发现中文文档较少,追根述源后,发现其中相当一部分同出一辙。

亲自摸索使用后,记录一下步骤,利己利人。

swagger-codegen项目地址: https://github.com/swagger-api/swagger-codegen

项目文档(README.md)说的比较详细,但是重复的地方太多,容易让新手搞晕。

其实,文档内容可以简化为如下步骤(凡‘略’,皆不予理睬):

【注意】以下步骤,均在Windows系统中操作,生成java客户端代码,其他语言类似;英文不好,有些不会翻译,故保留英文原文;

1、Table of contents(略)

2、Compatibility(略)

3、Prerequisites

3.1、从maven仓库下载swagger-codegen的jar文件,如下

io.swagger

swagger-codegen

2.2.1

放到本地目录(比如D:\env\swagger-codegen-cli-2.2.1.jar);

3.2、本机安装JDK7+,并设置$PATH(比如:D:\Java\jdk1.8.0_60\bin;);

3.3、本机安装Maven3.3.3+,并设置$PATH(比如:D:\apache-maven-3.3.3\bin;);

4、Building(略)

5、Docker(略)

6、Homebrew(略)

7、Getting Started

dos窗口中,执行如下命令(Windows系统下,换行符无效,必须写在同一行):

java -jar D:\env\swagger-codegen-cli-2.2.1.jar generate

-i http://petstore.swagger.io/v2/swagger.json

-l java

-o D:\swagger-client

--model-package com.xxx.client.model

--api-package com.xxx.client.api

【参数说明】

-jar 指定 swagger-codegen-cli-2.2.1.jar 的位置,绝对路径、相对路径均可;

-i 指定 swagger.json 的位置,本地路径、网络路径均可;

-l 指定客户端代码的语言;

-o 指定代码生成的位置;

--model-package 指定model代码的包名;

--api-package 指定api代码的包名;

8、Workflow Integration(略)

9、Github Integration(略)

【补充后续操作步骤】

10、将生成的代码拷贝到项目中(api、model、test)

11、pom.xml添加依赖(仅操作一次)

io.swagger

swagger-jaxrs

1.5.9

io.swagger

swagger-annotations

1.5.9

com.squareup.okhttp

okhttp

2.7.5

com.squareup.okhttp

logging-interceptor

2.7.5

com.google.code.gson

gson

2.6.2

joda-time

joda-time

2.9.3

12、修改ApiClient.java(一般来说,该文件无须覆盖,仅操作一次)

12.1、修改属性 basePath的值,自己的api根路径;

12.2、如果需要ssl,或者url追加token,需要修改 buildUrl()方法;

13、执行测试代码即可(生成的测试代码,方法体是空的,需要自己补充代码);

【补充】

A、下载源代码:

下载最新代码

> git clone https://github.com/swagger-api/swagger-codegen.git

下载指定版本

> git clone --branch v2.2.1 https://github.com/swagger-api/swagger-codegen.git

B、查看swagger-codegen支持的命令

> java -jar swagger-codegen-cli-2.2.1.jar help

用法: swagger-codegen-cli []

常用命令如下:

config-help   指定客户端语言的可选项说明

generate      生成客户端代码命令

help          帮助

langs         显式所有支持的语言

meta          MetaGenerator. Generator for creating a new template set and configuration for Codegen.  The output will be based on the language you specify, and includes default templates to include.

See 'swagger-codegen-cli help ' for more information on a specific command.

C、查看swagger-codegen的generate命令的可选项

> java -jar swagger-codegen-cli-2.2.1.jar help generate

NAME

swagger-codegen-cli generate - Generate code with chosen lang

SYNOPSIS

swagger-codegen-cli generate [options]

OPTIONS

-a

当获取远程swagger定义时,添加授权头信息;URL-encoded格式化的name,逗号隔开的多个值;

--auth

同 -a;

--additional-properties

设置额外的属性供模版使用;格式为name=value,name=value;

--api-package

指定生成的api类的包名;

--artifact-id

指定pom.xml的artifactId的值;

--artifact-version

指定pom.xml的artifact的版本;

-c

json格式的配置文件的路径;文件为json格式,支持的配置项因语言的不同而不同;

执行 config-help -l {lang} 命令查看详细的配置项;

--config

同 -c;

-D

指定系统属性,格式为name=value,name=value;

--group-id

指定pom.xml的groupId的值;

-i

指定swagger描述文件的路径,url地址或路径文件;该参数为必须;

--input-spec

同 -i;

--import-mappings

specifies mappings between a given class and the import that should be used for that class,

格式type=import,type=import;

--instantiation-types

设置实例类型映射,格式type=instantiatedType,type=instantiatedType.

例如(in Java):array=ArrayList,map=HashMap.换句话说,生成代码时,array类型会实例化为ArrayList;

--invoker-package

指定根包名称;

-l

指定生成客户端代码的语言,该参数为必须;

--lang

同 -l;

--language-specific-primitives

指定附加语言特定的原始类型,格式type1,type2,type3,type3.例如:String,boolean,Boolean,Double;

--library

library template (sub-template);

--model-package

指定生成的model类的包名;

-o

指定生成文件的位置(默认当前目录);

--output

同 -o;

-s

指定该参数表示不覆盖已经存在的文件;

--skip-overwrite

同 -s;

-t

指定模版文件所在目录;

--template-dir

同 -t;

--type-mappings

设置swagger类型与生成的代码类型之间的映射,格式swaggerType=generatedType,swaggerType=generatedType.

例如: array=List,map=Map,string=String;

-v

指定verbose mode;

--verbose

同 -v;

D、查看java客户端的可配置项

> java -jar swagger-codegen-cli-2.2.1.jar config-help -l java

CONFIG OPTIONS

sortParamsByRequiredFlag

Sort method arguments to place required parameters before optional parameters. (Default: true)

ensureUniqueParams

Whether to ensure parameter names are unique in an operation (rename parameters that are not). (Default: true)

modelPackage

package for generated models

apiPackage

package for generated api classes

invokerPackage

root package for generated code

groupId

groupId in generated pom.xml

artifactId

artifactId in generated pom.xml

artifactVersion

artifact version in generated pom.xml

sourceFolder

source folder for generated code

localVariablePrefix

prefix for generated code members and local variables

serializableModel

boolean - toggle "implements Serializable" for generated models (Default: false)

bigDecimalAsString

Treat BigDecimal values as Strings to avoid precision loss. (Default: false)

fullJavaUtil

whether to use fully qualified name for classes under java.util.

This option only works for Java API client (Default: false)

hideGenerationTimestamp

hides the timestamp when files were generated

dateLibrary

Option. Date library to use

joda - Joda

legacy - Legacy java.util.Date

java8-localdatetime - Java 8 using LocalDateTime (for legacy app only)

java8 - Java 8 native

useRxJava

Whether to use the RxJava adapter with the retrofit2 library. (Default: false)

library

library template (sub-template) to use (Default: okhttp-gson)

jersey1 - HTTP client: Jersey client 1.19.1. JSON processing: Jackson 2.7.0

feign - HTTP client: Netflix Feign 8.16.0. JSON processing: Jackson 2.7.0

jersey2 - HTTP client: Jersey client 2.22.2. JSON processing: Jackson 2.7.0

okhttp-gson - HTTP client: OkHttp 2.7.5. JSON processing: Gson 2.6.2

retrofit - HTTP client: OkHttp 2.7.5. JSON processing: Gson 2.3.1 (Retrofit 1.9.0).

IMPORTANT NOTE: retrofit1.x is no longer actively maintained so please upgrade to 'retrofit2' instead.

retrofit2 - HTTP client: OkHttp 3.2.0. JSON processing: Gson 2.6.1 (Retrofit 2.0.2).

Enable the RxJava adapter using '-DuseRxJava=true'. (RxJava 1.1.3)

E、查看swagger-codegen支持的客户端语言

> java -jar swagger-codegen-cli-2.2.1.jar langs

(结果略)

或参考 https://github.com/swagger-api/swagger-codegen/wiki/API-client-generator-HOWTO

F、服务器端代码生成,参考https://github.com/swagger-api/swagger-codegen/wiki/Server-stub-generator-HOWTO

G、swagger支持的数据类型映射

http://swagger.io/specification/

参考代码:DefaultCodegen.java

this.typeMapping = new HashMap();

this.typeMapping.put("array", "List");

this.typeMapping.put("map", "Map");

this.typeMapping.put("List", "List");

this.typeMapping.put("boolean", "Boolean");

this.typeMapping.put("string", "String");

this.typeMapping.put("int", "Integer");

this.typeMapping.put("float", "Float");

this.typeMapping.put("number", "BigDecimal");

this.typeMapping.put("DateTime", "Date");

this.typeMapping.put("long", "Long");

this.typeMapping.put("short", "Short");

this.typeMapping.put("char", "String");

this.typeMapping.put("double", "Double");

this.typeMapping.put("object", "Object");

this.typeMapping.put("integer", "Integer");

this.typeMapping.put("ByteArray", "byte[]");

this.typeMapping.put("binary", "byte[]");

遗留问题:

1、还不清楚如何将api数据类型和java的数据类型进行映射;

--------------------- 本文来自 wangjunjun2008 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/wangjunjun2008/article/details/53200437?utm_source=copy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql无法启动修复_记一次MySQL无法启动及修复经历

记得有次本地的MySQL无法启动,网上说,去删掉InnoDB日志就行,我就傻乎乎的去删掉了InnoDB相关的文件,果然,没有任何问题,正常启动了。可是谁曾想,过了几天,故障复现了,我就…

mysql的操作语句_Mysql最常用的操作语句收集

Mysql中常用语句简单易学springboot微服务是现在流行的框架,目前大多数做java的人都在使用,java的生态一直很好,各种插件各种第三方jar包推动着java的运行。Mysql是Springboot最常用的数据库,主要原因是Mysql免费而且轻量。考虑性…

java获取网络带宽_Linux Java 获取CPU使用率,内存使用率,磁盘IO,网络带宽使用率等等...

/*** 获取带宽上传下载速度* return*/public String getNetWorkSpeed() {boolean result false;String detailInfo "";DecimalFormat df new DecimalFormat("0.00");String dl "";String ul "";System.out.println("开始收集…

java周期_java 周期时期计算

package org.apple.date;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;/*** 周期时间* author shaoyu**/public class CycleDate {public static void main(String[] args) {SimpleDateFormat dateformatnew SimpleDateFormat("yy…

python实现qq登录界面_使用Python编写一个QQ办公版的图形登录界面!

最近,QQ的办公版本——TIM进行了一次更新升级。本次更新升级大幅修改了界面的样式,看起来更加的清爽、简洁和高效了。这种界面州的先生还是比较喜欢的,没有QQ那么花里胡哨,也比微信那些残缺的功能更加丰富。并且这次的登录界面还新…

python算法详解豆瓣_豆瓣爬虫实践-python版

豆瓣登录,无验证码版:import requests#starturl "https://www.douban.com/accounts/login"loginurl "https://accounts.douban.com/login"headers {User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KH…

python项目打包部署到ios_Python iOS 自动打包脚本(包含上传到fir)

Python iOS自动打包脚本使用说明1.1 使用python3编写,没有python3 环境的需要下载python3python官网下载1.2 通过Homebrew安装Python31.2.1 先搜索$ brew search python输出:app-engine-python micropython python3boost-python python wxpythongst-pyth…

stlink 升级固件以后失败_ST-Link不能下载程序的几种解决办法

一直在用J-LINK,最近改用ST-Link,出现了不少无法下载程序的情况,这里列出几种解决的办法(针对STM32F103系列):1#是不是你没有选择Flash算法?什么都没有加的话,会提示“找不到Flash算法”的哦2#是不是你JTAG…

cnsl是什么意思_VS2010下创建静态链接库和动态链接库

VS2010下创建静态链接库和动态链接库类封装成dll如果你的工作长期与某个领域相关,比如说长期做直接体绘制 (DVR)方面的开发,那么你可能经常使用自己的传递函数类,如果每一个工程你都把传递函数类的.h和.cpp文件添加进去会比较麻烦&#xff0c…

java hash取余_为什么Java的hash表的长度一直是2的指数次幂?为什么这个(hash(h-1)=hash%h)位运算公式等价于取余运算?...

1.什么是hash表?答:简单回答散列表,在hash结构散列(分散)存放的一种数据集结构。2.如何散列排布,如何均匀排布?答:取余运算3.Java中如何实现?答:hash&(h-1)4.为什么hash&(h-…

java .net 3des_Java.net3DES差异及互通

主要差异如下:1、 对于待加密解密的数据,各自的填充模式不一样C#的模式有:ANSIX923、ISO10126、None、PKCS7、Zero,而Java有:NoPadding、PKCS5Padding、SSL3Padding2、 各自默认的3DES实现,模式和填充方式…

生产调度java程序原码_Rxjava的线程调度源码解析

代码调用Observable.just(1).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer() {Overridepublic void accept(Integer integer) throws Exception {}});直接进入主题,先看subscribe中调用了哪些方法//Observable.…

linux 触摸屏测试源码_Linux触摸屏驱动

问题二:echo "ac_cv_func_malloc_0_nonnullyes" >arm-linux.cache//避免检查ac_cv_func_malloc_0_nonnull若出现提示: undefined reference to rpl_malloc解决:发现config.h.in和config.h里定义了#undef malloc#undef realloc把这两个用//注…

java有没有number数据类型_Java基本数据类型之Number

数据类型byte:byte数据类型是8位、有符号的,以二进制补码表示的整数;最小值是-128(-2^7);最大值是127(2^7-1);byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型…

java中main缺少主体_缺少方法主体,或声明了摘要

我收到此错误消息:线程“主”中的异常java.lang.RuntimeException:无法编译的源代码-错误的符号类型:PetTest.main(PetTest.java:18)上的Pet.saySomething Java结果:1这是我所拥有的:对于Speak课堂,public …

java获取b站动态列表地址_爬虫入门(三)爬取b站搜索页视频分析(动态页面,DBUtils存储)...

这一次终于到了分析b站视频了。开始体会到写博客非常占用学技术的时间,但是还是希望能总结,沉淀下来。工具:使用Webmaigc框架,DBUtils,C3P0连接池。分析过程:b站的搜索页面是这样的。如果浏览器右键查看源代…

python a和b字符串和占位符输出_Python占位符的使用与format函数字符串格式化详解...

Python字符串格式化01字符串的格式化分类字符串的格式化方法共两种:占位符(%)与format方式。占位符方式在Python2比较常见,随着Python3到来,format方式变得广泛起来,format函数常与print()函数结合使用,具备很强的格式…

python list tuple 消耗_Python内存消耗:dict VS元组列表

在这种情况下,你实际上得到了一个不完整的内存使用图片。字典的总大小以不规则的间隔增加一倍以上,如果在字典大小增加后比较这两个结构的大小,它会再次变大。一个带有递归大小函数的简单脚本(见下面的代码)显示了一个非常清晰的模式&#xf…

python 项目构建工具_GitHub - shjlone/emake: 你见过的最简单的 GCC/CLANG 项目构建工具(python3版本)...

python3实现版本PrefaceGNU Make 太麻烦?Makefile 写起来太臃肿?头文件依赖生成搞不定?多核同时编译太麻烦?Emake 帮你解决这些问题:使用简单:设定源文件,设定编译参数和输出目标就行了&#xf…

18135usm_佳能PZ-E1+EF-S 18-135mm f/3.5-5.6 IS USM镜头 小型工作室的利器

EF-S 18-135mm f/3.5-5.6 IS USM 在大神眼里据对是属于狗头系列的 哈哈哈 但是这货如果搭配佳能的 PZ-E1 在配合佳能80D 那绝对是小型视频工作室的首选 !!!mxcpTB2rqUOg80kpuFjSsppXXcGTXXa_!!104284319.jpg (156.5 KB, 下载次数: 1)2017-3-…