1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
| # 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字符串 # */
|