IDEA插件系列-EasyYapi

1 篇文章 0 订阅

插件介绍

使用方式

安装

安装方式

请使用这个版本 ~~easy-yapi.2.1.3.183.0.jar~~https://github.com/tangcent/easy-yapi/releases/download/v2.1.3/easy-yapi.2.1.3.183.0.jar

rpc接口导入支持以下使用方法

  1. 打开项目中的包含rpc的文件或者在IDEA的左边项目文件区域选择文件或者文件夹 使用快捷键alt shift E(windows)/ctrl E(mac) 然后选择要导出的API,选择导出渠道Yapi/Markdown 点击[✔]按钮或者按回车键完成导出
  2. 打开项目中的包含rpc的文件 右键文件内容选择Generate...或者用[Alt + Insert]/[Ctrl+Enter](快捷键可能不一样)" 然后选择ExportYapi/ExportMarkdown
  3. 在IDEA的左边项目文件区域选择文件或者文件夹 鼠标点击最上方Code > ExportYapi/ExportMarkdown

rpc相关规则

规则的key规则目标(上下文)版本规则描述
mdoc.class.filterclassv0.9.5+选择哪些类可以导出方法文档(rpc)
mdoc.method.filtermethodv0.9.5+选择哪些方法可以导出方法文档(rpc)
mdoc.method.pathmethodv0.9.5+设置方法文档(rpc)的路径
mdoc.method.http.methodmethodv0.9.5+设置方法文档(rpc)HTTP请求方式

点击规则配置查看更多.


  • **导出rpc方法的功能默认是关闭的 , 开启需要勾选:Preferences(Settings) > Other Settings > EasyApi > Support > methodDoc** , 参见:IDEA配置
  • rpc文档支持导出到yapi/markdown

rest接口导入

支持以下使用方法

  1. 打开项目中的包含api/rpc的文件或者在IDEA的左边项目文件区域选择文件或者文件夹 使用快捷键alt shift E(windows)/ctrl E(mac) 然后选择要导出的API,选择导出渠道Yapi 点击[✔]按钮或者按回车键完成导出
  2. 打开项目中的包含api/rpc的文件 右键文件内容选择Generate...或者用[Alt + Insert]/[Ctrl+Enter](快捷键可能不一样)" 然后选择ExportYapi
  3. 在IDEA的左边项目文件区域选择文件或者文件夹 鼠标点击最上方Code > ExportYapi
  4. 鼠标点击最上方Code > YapiDashBoard 然后就可以用鼠标将左边的API拖动到右边yapi目录中,完成API导出到Yapi

  • 初次使用可能会以弹窗的方式要求输入必要的信息,参见:yapi配置
  • 熟悉后可以尝试:yapi mock

项目中使用

在项目根路径加入 .easy.api.config 文件

代码注释配置

类注释
/**
 * 前置网关配置中心方案设计
 *
 * @author Khalid
 * @version V1.0
 * @since 2021-03-02 09:13
 */
@RestController
public class GatewayConfigCenterController {
}
方法注释
/**
 * 获取业务通用配置
 *
 * @param interchangeableConfigQueryParam
 * @return
 * @folder 自助终端配置中心方案设计
 */
@PostMapping("/gateway/configcenter/getInterchangeableConfig")
@ResponseBody
public Result<List<InterchangeableConfigVO>> getInterchangeableConfig(
    @RequestBody InterchangeableConfigQueryParam interchangeableConfigQueryParam) {
    return Results.success(new ArrayList<>());
}
字段注释
package com.khalidlife.demo.schemedesign.controller.param;

import java.util.List;

import javax.validation.constraints.NotBlank;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

/**
 * 通用配置入参
 *
 * @author Khalid
 * @version V1.0
 * @since 2021-03-02 10:05
 */
@FieldDefaults(level = AccessLevel.PRIVATE)
@Data
public class InterchangeableConfigQueryParam {
    /**
     * 医院ID(虚拟结算长编号)
     */
    @NotBlank(message = "医院ID不能为空")
    String corpCode;

    /**
     * 渠道ID
     */
    Long channelId;

    /**
     * 分组id
     */
    Long groupId;

    /**
     * config key列表
     */
    List<String> configKeys;
}

easy.api.config文件配置

# Yapi mock规则:通过字段名及类型等特征来配置mock规则
## 增加自定义mock规则
#mockjs官方示例: http://mockjs.com/examples.html
#定义一些基础的规则
#中国手机号
phone=1@pick(["34","35","36","37","38","39","50","5","52","58","59","57","82","87","88","70","47","30","3","32","55","56","85","86","33","53","80","89"])@string("number", 8)
#毫秒时间戳
mtimestamp=@now('T')
#0-9
digit=@natural(0,9)
#小于1000的自然数
natural_lt_1000=@natural(0,1000)
#小数点后两位
float_with_two=@natural(0,10000).@natural(0,100)
#http url
http_url=@pick(["http","https"])://www.@domain()/@string('lower',1,8)?@string('lower',2,4)=@string('number',1,2)
#objectId 只是字符和位数,不满足具体协议
objectId=@string("0123456789abcdef",24,24)

# module
#用于API分组
#当无配置生效时, 默认使用当前模块/项目名
#导出postman时,将为每个module创建一个文件夹
#导出yapi时,每个module对应yapi中的一个项目
#module=方案设计接口描述


# ignore
#用于忽略class/method,不进行解析
#注释在class上时,整个类将被忽略
#注释在method上时,当前方法将被忽略
ignore=#ignore

# json.rule.field.name
#用于设置输出/输入的字段名(用于json中字段名与类中字段名不一致)
#Support for Jackson annotations
json.rule.field.name=@com.fasterxml.jackson.annotation.JsonProperty#value
#Support for Gson annotations
#json.rule.field.name=@com.google.gson.annotations.SerializedName#value

# json.rule.field.ignore
#忽略字段(设置某些字段不出现在json中,或不需要请求时给出)
#deprcated, see field.ignore
#Support for Jackson annotations
json.rule.field.ignore=@com.fasterxml.jackson.annotation.JsonIgnore#value
#Support for Gson annotations
#json.rule.field.ignore=!@com.google.gson.annotations.Expose#serialize

# field.ignore
#忽略字段(设置某些字段不出现在json中,或不需要请求时给出)
#Support for Jackson annotations
field.ignore=@com.fasterxml.jackson.annotation.JsonIgnore#value
#Support for Gson annotations
#field.ignore=!@com.google.gson.annotations.Expose#serialize

# json.rule.convert
#The ObjectId and Date are parsed as strings
json.rule.convert[org.bson.types.ObjectId]=java.lang.String
json.rule.convert[java.util.Date]=java.lang.String
json.rule.convert[java.sql.Timestamp]=java.lang.String
json.rule.convert[java.time.LocalDateTime]=java.lang.String
json.rule.convert[java.time.LocalDate]=java.lang.String
#resolve HttpEntity/RequestEntity/ResponseEntity
###set resolveProperty = false
json.rule.convert[#regex:org.springframework.http.HttpEntity]=java.lang.Object
json.rule.convert[#regex:org.springframework.http.HttpEntity<(.*?)>]=${1}
json.rule.convert[#regex:org.springframework.http.RequestEntity<(.*?)>]=${1}
json.rule.convert[#regex:org.springframework.http.RequestEntity]=java.lang.Object
json.rule.convert[#regex:org.springframework.http.ResponseEntity<(.*?)>]=${1}
json.rule.convert[#regex:org.springframework.http.ResponseEntity]=java.lang.Object
###set resolveProperty = true

# field.doc(doc.field)
#字段的额外注释
#deprecated info(java)
field.doc[#deprecated]=groovy:"\n「已废弃」" + it.doc("deprecated")
field.doc[@java.lang.Deprecated]=「已废弃」
#deprecated info(kotlin)
field.doc[@kotlin.Deprecated]=groovy:"\n「已废弃」" + it.ann("kotlin.Deprecated","message")

# method.doc(doc.method)
#方法(API)的额外注释
#deprecated info(java)
method.doc[#deprecated]=groovy:"\n「已废弃」" + it.doc("deprecated")
method.doc[@java.lang.Deprecated]=「已废弃」
method.doc[groovy:it.containingClass().hasDoc("deprecated")]=groovy:"\n「已废弃」" + it.containingClass().doc("deprecated")
method.doc[groovy:it.containingClass().hasAnn("java.lang.Deprecated")]=「已废弃」
#deprecated info(kotlin)
#method.doc[@kotlin.Deprecated]=groovy:"\n「已废弃」" + it.ann("kotlin.Deprecated","message")
#method.doc[groovy:it.containingClass().hasAnn("kotlin.Deprecated")]=groovy:"\n「已废弃」 " + it.containingClass().ann("kotlin.Deprecated","message")

# param.doc(doc.param)
#参数的额外注释
param.doc=groovy:"类型:"+tool.uncapitalize(it.type().name().replace("java.lang.",""))

# param.required
#用于标记API参数是否为必须(即不可为空)
#Support for javax.validation annotations
param.required=@javax.validation.constraints.NotBlank
param.required=@"javax.validation.constraints.NotNull
param.required=@javax.validation.constraints.NotEmpty

# field.required
#用于标记字段是否为必须(即不可为空)
#Support for javax.validation annotations
field.required=@"javax.validation.constraints.NotBlank
field.required=@javax.validation.constraints.NotNull
field.required=@javax.validation.constraints.NotEmpty

# field.mock
#用于生成yapi相关mock信息
# mock for javax.validation

###set resolveMulti = first
# define var
number_min=-9999
number_max=9999
float_dmin=2
java_integer_types=["java.lang.Integer","int","java.lang.Long","long","java.lang.Short","short","java.math.BigInteger"]
java_float_types=["java.lang.Float","float","java.lang.Double","double","java.math.BigDecimal"]
# mock_integer_or_float=${java_integer_types}.contains(it.type().name())?"@integer":"@float"

# AssertTrue|AssertFalse|Email
field.mock[@javax.validation.constraints.AssertTrue]=true
field.mock[@javax.validation.constraints.AssertFalse]=false
field.mock[@javax.validation.constraints.Email]=groovy:"@email"
#
## Positive&PositiveOrZero
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Positive")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(1,${number_max})"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.PositiveOrZero")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(0,${number_max})"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Positive")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(0.01,${number_max},${float_dmin})"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.PositiveOrZero")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(0,${number_max},${float_dmin})"
#
## Negative&NegativeOrZero
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Negative")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(${number_min},-1)"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.NegativeOrZero")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(${number_min},0)"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Negative")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(${number_min},0.01,${float_dmin})"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.NegativeOrZero")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(${number_min},0,${float_dmin})"
#
## Max+Min
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Max")&⁢.hasAnn("javax.validation.constraints.Min")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer("+it.ann("javax.validation.constraints.Min")+","+it.ann("javax.validation.constraints.Max")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Max")&⁢.hasAnn("javax.validation.constraints.Min")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float("+it.ann("javax.validation.constraints.Min")+","+it.ann("javax.validation.constraints.Max")+",${float_dmin})"
#
## Max|Min
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Max")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(0,"+it.ann("javax.validation.constraints.Max")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Min")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer("+it.ann("javax.validation.constraints.Min")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Max")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(0,"+it.ann("javax.validation.constraints.Max")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Min")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float("+it.ann("javax.validation.constraints.Min")+")"
#
## DecimalMax+DecimalMin
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMax")&⁢.hasAnn("javax.validation.constraints.DecimalMin")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer("+it.ann("javax.validation.constraints.DecimalMin")+","+it.ann("javax.validation.constraints.DecimalMax")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMax")&⁢.hasAnn("javax.validation.constraints.DecimalMin")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float("+it.ann("javax.validation.constraints.DecimalMin")+","+it.ann("javax.validation.constraints.DecimalMax")+",${float_dmin})"
#
## DecimalMax|DecimalMin
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMax")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(0,"+it.ann("javax.validation.constraints.DecimalMax")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMin")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer("+it.ann("javax.validation.constraints.DecimalMin")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMax")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(0,"+it.ann("javax.validation.constraints.DecimalMax")+",${float_dmin})"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMin")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float("+it.ann("javax.validation.constraints.DecimalMin")+",${float_dmin})"

###set resolveMulti = error

# field.default.value(v1.7.1+)
#用于设置字段的默认值
field.default.value=#default

# api.open
#标记接口是否公开
api.open=#open

# api.status
#标记接口status
#yapi status
api.status[#undone]=undone
api.status[#todo]=undone

# mdoc.class.filter
#用于选择哪些类可以导出方法(rpc)文档, 根据当前项目情况
#如果所有的RPC接口类都以Client结尾, 则可配置:
mdoc.class.filter=groovy:it.name().endsWith("Client")
#如果所有的RPC接口类包都在a.b.c.client, 则可配置:
mdoc.class.filter=groovy:it.name().startsWith("a.b.c.client")

# constant.field.ignore
#忽略常量字段
#ignore serialVersionUID
constant.field.ignore=groovy:it.name()=="serialVersionUID"

# method.return.main
#此配置仅设置返回值的核心主体,使得@return的注释落在主体属性上,不影响返回类型及字段.
method.return.main[groovy:it.returnType().isExtend("com.khalidlife.demo.schemedesign.common.domain.Result")]=data

# method.return
#为了方便书写,我们可以尝试使用{@link}来设置实际响应类型,利用helper.resolveLink来解析
method.return[#real_return]=groovy: helper.resolveLink(it.doc("real_return"))
#/**
# * @real_return {@link Result<UserInfo>}
# */
#更进一步的,如果所有的响应都由com.itangcent.common.dto.Result包装
#method.return[#real_return]=groovy: "com.khalidlife.demo.schemedesign.common.domain.Result<" +  helper.resolveLink(it.doc("real_return")) +">"
#/**
# * @real_return {@link UserInfo}
# */


# folder.name
# 用于设置API所属文件夹的名称
# 缺省情况下,默认使用api所在类作为所属文件夹
# read folder name from tag `folder`
folder.name=#folder
#使用方法:方法上加注释
#/**
# * @folder Mock字符串
# */

RPC项目配置

工具配置页

待补充…
image.png

easy.api.config文件配置

module=cloud-medical-service-client

# mdoc.class.filter
#用于选择哪些类可以导出方法(rpc)文档, 根据当前项目情况
#如果所有的RPC接口类都以Client结尾, 则可配置:
#mdoc.class.filter=groovy:it.name().endsWith("Service")
#如果所有的RPC接口类包都在a.b.c.client, 则可配置:
mdoc.class.filter=groovy:it.name().startsWith("com.yuantu.cloud.hospital.cm.service.client.service")

# constant.field.ignore
#忽略常量字段
#ignore serialVersionUID
constant.field.ignore=groovy:it.name()=="serialVersionUID"

# method.return.main
#此配置仅设置返回值的核心主体,使得@return的注释落在主体属性上,不影响返回类型及字段.
method.return.main[groovy:it.returnType().isExtend("com.yuantu.lego.module.api.convention.data.domain.Result")]=data

# folder.name
# 用于设置API所属文件夹的名称
# 缺省情况下,默认使用api所在类作为所属文件夹
# read folder name from tag `folder`
folder.name=#folder
#使用方法:方法上加注释
#/**
# * @folder Mock字符串
# */

# mock规则
# Yapi mock规则:通过字段名及类型等特征来配置mock规则
## 增加自定义mock规则
#mockjs官方示例: http://mockjs.com/examples.html
#定义一些基础的规则
#中国手机号
phone=1@pick(["34","35","36","37","38","39","50","5","52","58","59","57","82","87","88","70","47","30","3","32","55","56","85","86","33","53","80","89"])@string("number", 8)
#毫秒时间戳
mtimestamp=@now('T')
#0-9
digit=@natural(0,9)
#小于1000的自然数
natural_lt_1000=@natural(0,1000)
#小数点后两位
float_with_two=@natural(0,10000).@natural(0,100)
#http url
http_url=@pick(["http","https"])://www.@domain()/@string('lower',1,8)?@string('lower',2,4)=@string('number',1,2)
#objectId 只是字符和位数,不满足具体协议
objectId=@string("0123456789abcdef",24,24)

# ignore
#用于忽略class/method,不进行解析
#注释在class上时,整个类将被忽略
#注释在method上时,当前方法将被忽略
ignore=#ignore

# method.doc(doc.method)
#方法(API)的额外注释
#deprecated info(java)
method.doc[#deprecated]=groovy:"\n「已废弃」" + it.doc("deprecated")
method.doc[@java.lang.Deprecated]=「已废弃」
method.doc[groovy:it.containingClass().hasDoc("deprecated")]=groovy:"\n「已废弃」" + it.containingClass().doc("deprecated")
method.doc[groovy:it.containingClass().hasAnn("java.lang.Deprecated")]=「已废弃」

###set resolveMulti = first
# define var
number_min=-9999
number_max=9999
float_dmin=2
java_integer_types=["java.lang.Integer","int","java.lang.Long","long","java.lang.Short","short","java.math.BigInteger"]
java_float_types=["java.lang.Float","float","java.lang.Double","double","java.math.BigDecimal"]
# mock_integer_or_float=${java_integer_types}.contains(it.type().name())?"@integer":"@float"

# AssertTrue|AssertFalse|Email
field.mock[@javax.validation.constraints.AssertTrue]=true
field.mock[@javax.validation.constraints.AssertFalse]=false
field.mock[@javax.validation.constraints.Email]=groovy:"@email"
#
## Positive&PositiveOrZero
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Positive")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(1,${number_max})"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.PositiveOrZero")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(0,${number_max})"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Positive")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(0.01,${number_max},${float_dmin})"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.PositiveOrZero")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(0,${number_max},${float_dmin})"
#
## Negative&NegativeOrZero
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Negative")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(${number_min},-1)"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.NegativeOrZero")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(${number_min},0)"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Negative")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(${number_min},0.01,${float_dmin})"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.NegativeOrZero")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(${number_min},0,${float_dmin})"
#
## Max+Min
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Max")&⁢.hasAnn("javax.validation.constraints.Min")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer("+it.ann("javax.validation.constraints.Min")+","+it.ann("javax.validation.constraints.Max")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Max")&⁢.hasAnn("javax.validation.constraints.Min")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float("+it.ann("javax.validation.constraints.Min")+","+it.ann("javax.validation.constraints.Max")+",${float_dmin})"
#
## Max|Min
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Max")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(0,"+it.ann("javax.validation.constraints.Max")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Min")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer("+it.ann("javax.validation.constraints.Min")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Max")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(0,"+it.ann("javax.validation.constraints.Max")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.Min")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float("+it.ann("javax.validation.constraints.Min")+")"
#
## DecimalMax+DecimalMin
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMax")&⁢.hasAnn("javax.validation.constraints.DecimalMin")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer("+it.ann("javax.validation.constraints.DecimalMin")+","+it.ann("javax.validation.constraints.DecimalMax")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMax")&⁢.hasAnn("javax.validation.constraints.DecimalMin")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float("+it.ann("javax.validation.constraints.DecimalMin")+","+it.ann("javax.validation.constraints.DecimalMax")+",${float_dmin})"
#
## DecimalMax|DecimalMin
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMax")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer(0,"+it.ann("javax.validation.constraints.DecimalMax")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMin")&&${java_integer_types}.contains(it.jsonType().name())]=groovy:"@integer("+it.ann("javax.validation.constraints.DecimalMin")+")"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMax")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float(0,"+it.ann("javax.validation.constraints.DecimalMax")+",${float_dmin})"
#field.mock[groovy:it.hasAnn("javax.validation.constraints.DecimalMin")&&${java_float_types}.contains(it.jsonType().name())]=groovy:"@float("+it.ann("javax.validation.constraints.DecimalMin")+",${float_dmin})"

###set resolveMulti = error

# field.default.value(v1.7.1+)
#用于设置字段的默认值
field.default.value=#default

# api.open
#标记接口是否公开
api.open=#open

# api.status
#标记接口status
#yapi status
api.status[#undone]=undone
api.status[#todo]=undone


# 设置方法文档(rpc)HTTP请求方式, 默认POST
mdoc.method.http.method=groovy:it.argCnt()==0?"GET":null
  • 35
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值