ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Java Ρ ΠΏΠΎΠΌΠΎΡΡΡ swagger-codegen Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² ΠΊΠ»Π°ΡΡΡ-ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ foo Π±ΡΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΉΠ» swagger:
swagger: "2.0"
info:
title: "Test"
version: "2"
host: "petstore.swagger.io"
basePath: "/v2"
schemes:
- "http"
paths:
/test:
post:
tags:
- "pet"
summary: "Test"
parameters:
- in: "body"
name: "body"
description: "Pet object that needs to be added to the store"
required: true
schema:
$ref: "#/definitions/test"
responses:
200:
description: ""
definitions:
test:
type: "boolean"
ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ:
/**
* TestModel
*/
<strong i="11">@Validated</strong>
@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2018-02-08T10:30:55.500+01:00")
public class TestModel {
@JsonProperty("someBoolean")
private Boolean someBoolean = null;
public TestModel someBoolean(Boolean someBoolean) {
this.someBoolean = someBoolean;
return this;
}
/**
* Get someBoolean
* <strong i="12">@return</strong> someBoolean
**/
@ApiModelProperty(value = "")
public Boolean isSomeBoolean() {
return someBoolean;
}
public void setSomeBoolean(Boolean someBoolean) {
this.someBoolean = someBoolean;
}
//equals, hashocde and toString here
}
ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π² ΡΡΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ΅, Π΅ΡΠ»ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠΌ, Hibernator Validator ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π΅Π³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«getSomeBooleanΒ», Π° Π½Π΅ Β«isSomeBooleanΒ», ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π°ΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Hibernate ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΡΡΠΎ.
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π° ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Β«nullΒ» ΠΈΠ»ΠΈ ΠΏΡΠΎΠΏΡΡΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΡΠΎΠ²Π°Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ.
2.3.1
Π― Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° CLI, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π΅ ΡΠ΅ΡΠ΅Π· [gradle] https://github.com/thebignet/swagger-codegen-gradle-plugin-example), Π½ΠΎ Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° gradle ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ :
task generateApi {
inputs.file(swaggerInput)
outputs.dir(generatedSourcesPath)
doLast {
def config = new CodegenConfigurator()
config.setInputSpec(swaggerInput.path)
config.setOutputDir(generatedSourcesPath.path)
config.setLang('spring')
//The documentation for the properties below can be found by downloading swagger-codegen-cli.jar
//and running java -jar swagger-codegen-cli.jar config-help -l spring
config.setAdditionalProperties([
'invokerPackage': 'com.stibosystems.ziggy.mainbackend.api',
'modelPackage': 'com.stibosystems.ziggy.mainbackend.api.model',
'apiPackage': 'com.stibosystems.ziggy.mainbackend.api',
'sourceFolder': '.', //This is relative to the output dir
//We don't care about the timestamp, but need the <strong i="22">@Generated</strong> annotation so error prone knows not to check generated files
'hideGenerationTimestamp': false,
'dateLibrary': 'java8',
'java8': true,
'interfaceOnly': true,
'useBeanValidation': true,
'withXml': false,
'useTags': true
])
new DefaultGenerator().opts(config.toClientOptInput()).generate()
Π― ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΠΌΡ Π³Π΅ΡΡΠ΅ΡΠ° ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π²Π° Π³Π΅ΡΡΠ΅ΡΠ° ΠΈ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΡΡΠ°ΡΠΎΠ³ΠΎ.
@GeeWee Π²Ρ ΠΌΠ΅Π½ΡΠ΅ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ, Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Ρ ΡΠ°Π±Π»ΠΎΠ½. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ:
https://github.com/swagger-api/swagger-codegen/pull/7344
https://github.com/swagger-api/swagger-codegen/issues/7261
ΠΡΠΈΠ²Π΅Ρ, ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΠΈΠ»ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ?
ΠΠ°ΠΊ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ?
ΠΠ»ΠΈ ΠΊΠ°ΠΊ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ getSomeBool Π²ΠΌΠ΅ΡΡΠΎ isSomeBool?
@ wing328, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠ²ΡΠ·Π°Π»ΠΈ Ρ PR https://github.com/swagger-api/swagger-codegen/pull/7344, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ is / get / has Π΄Π»Ρ Boolean.
ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅? ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π°ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ°ΠΊΠΎΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΠΈΠ»ΠΈ Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²Π΅ΡΠΎΠ²?
Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬:
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @ wing328 , Π² ΡΡΠΎΠΌ ΠΌΠ½Π΅ ΠΏΠΎΠΌΠΎΠ³ Π²Π°Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π² PR, ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π» {{#isBoolean}} get {{/ isBoolean}} Π² pojo.mustache.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠ½Π΅ ΠΏΡΠΎΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΅ΡΠΈΡΡ Π΅Π³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΡΠ΅ΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²:https://github.com/swagger-api/swagger-codegen/issues/7980 , https://github.com/swagger-api/swagger-codegen/issues/8001 , https://github.com/swagger- api / swagger-codegen / issues / 8044 ~~Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬:ΠΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ ΡΠΏΠ°ΡΠΈΠ±ΠΎ
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΈΠ²Π΅Ρ, ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΠΈΠ»ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ?