Al generar modelos Java con swagger-codegen, los valores booleanos se convierten en clases contenedoras. Por ejemplo, un booleano llamado foo generará un objeto contenedor booleano.
Por ejemplo, el archivo 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"
generará el siguiente modelo:
/**
* 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
}
Como se mencionó en esta respuesta, si el booleano no es una primitiva, Hibernator Validator solo lo inspecciona si el getter se llama "getSomeBoolean" no "isSomeBoolean" que es solo la convención con primitivas. Por tanto, Hibernate lo ignora.
En la práctica, esto significa que cualquier objeto con booleanos, el booleano se ignora para la validación, lo que significa que enviar "nulo" u omitir el objeto no falla en la validación.
2.3.1
No estoy muy seguro de cuál es el comando CLI adecuado, ya que lo usamos a través de [gradle] https://github.com/thebignet/swagger-codegen-gradle-plugin-example), pero nuestra tarea de gradle es la siguiente :
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()
Sugiero cambiar el nombre del captador o agregar dos captadores y desaprobar el anterior.
@GeeWee cambia la convención de nomenclatura del captador personalizando la plantilla. Consulte lo siguiente para obtener más información:
https://github.com/swagger-api/swagger-codegen/pull/7344
https://github.com/swagger-api/swagger-codegen/issues/7261
Hola, ¿este problema se solucionó o aún existe?
¿Cómo lograrlo?
¿O cómo forzar el método getter de envoltura booleana a getSomeBool en lugar de isSomeBool?
@ wing328 se vinculó a PR https://github.com/swagger-api/swagger-codegen/pull/7344 que permite a los usuarios personalizar is / get / has para booleano.
¿Puede dar un ejemplo de cómo usarlo realmente, por favor? ¿Puede vincular a dicha plantilla o dar algunos consejos?
EDITAR:
Gracias @ wing328 . Tu comentario en las relaciones públicas me ayudó a lograrlo, editado {{#isBoolean}} get {{/ isBoolean}} en pojo.mustache.
Ahora solo tengo que averiguar si su problema puede solucionarse editando plantillas: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 ~~EDITAR:Todo arreglado gracias
Comentario más útil
Hola, ¿este problema se solucionó o aún existe?