Как генерировать конструкторы в swagger codegen?

Codegen не сгенерировал никакого конструктора. Я сослался на файл swagger в зоомагазине, использовал последний файл jar swagger codegen.

Но был сгенерирован только конструктор по умолчанию.

Он не создает конструктор на основе своих полей.

Как включить?


person a3.14_Infinity    schedule 19.08.2017    source источник
comment
почему за это проголосовали?   -  person a3.14_Infinity    schedule 19.08.2017
comment
Какую именно цель вы сгенерировали? Как выглядит сгенерированный конструктор и как вы ожидаете, что он будет выглядеть?   -  person Helen    schedule 19.08.2017
comment
Чтобы включить его, вам нужно будет изменить шаблон, чтобы создать нужные вам конструкторы.   -  person moondaisy    schedule 20.08.2017
comment
Swagger генерирует нечто отличное от обычного конструктора. Он использует шаблон проектирования строителя. Например. если у вас есть класс Car с переменными engine и wheels, вы можете инициализировать этот класс следующим образом: Car car = new Car().engine("Diesel").wheels(4).   -  person Defozo    schedule 28.12.2017
comment
Вам удалось это решить? мне тоже интересно   -  person Yeikel    schedule 17.07.2018
comment
@Defozo Как включить этот конструктор?   -  person Yeikel    schedule 17.07.2018
comment
@Yeikel Может быть, вас заинтересует плагин Swagger-codegen Maven/Gradle?   -  person Defozo    schedule 18.07.2018
comment
@defozo Я попробовал плагин, но не нашел никакой информации о создании билдера. Не могли бы вы указать мне пример?   -  person Yeikel    schedule 18.07.2018
comment
@a3.14_Infinity, ты знаешь, как создать конструктор на основе его поля? Как вы сказали, для меня генерируется только конструктор по умолчанию   -  person T.S    schedule 24.08.2018
comment
@Yeikel, ты знаешь, как создать конструктор на основе его поля? нет конструктора по умолчанию   -  person T.S    schedule 24.08.2018
comment
Я никогда не мог решить это   -  person Yeikel    schedule 24.08.2018


Ответы (2)


Если вам действительно нужен конструктор с параметрами, вы можете сделать это, изменив файл(ы) шаблона, которые заканчиваются на .moustache.

шаблоны "включить/использовать/изменить"

Я предполагаю, что вы собираетесь редактировать существующий шаблон и вам нужен конструктор для каждой модели.

Вот простой пример конструктора внутри файла шаблона модели:

public {{classname}}( {{#vars}} {{datatype}} {{baseName}}{{^-last}},{{/-last}} {{#-last}}){
construct code here
}{{/-last}}{{/vars}}

обратите внимание, что это должно быть между тегами {{#model}} {{/model}}

для получения дополнительной информации о шаблонах усов см.

https://mustache.github.io/mustache.5.html

Список переменных шаблона

примеры шаблонов для codegen

person Viktor Baert    schedule 28.08.2018
comment
Будет ли этот подход работать для создания конструкторов, являющихся частью сгенерированной иерархии классов? Таким образом, если Animal.java имеет имя String, а Dog.java расширяет Animal и добавляет породу String, может ли этот подход генерировать конструктор Dog следующим образом: Dog(String name, String порода) { super(name); this.breed = порода}? - person Jason; 18.04.2019
comment
В codegen должна быть поддержка иерархии/наследования. Я не могу гарантировать это, поскольку я еще не использовал его. Я предполагаю, что есть несколько переменных codgenmodel, связанных с иерархией, которые вы можете использовать в шаблонах (если они работают правильно). - person Viktor Baert; 18.04.2019

Сначала я хотел бы поблагодарить @Viktor Baert за его ответ. В то время как ответ дал направление, он не дал достаточно, чтобы решить его. Обратите внимание на изменение и дополнение к ответу выше.

Изменение с {{datatype}} на {{{datatypeWithEnum}}} в подписи конструктора. Это изменение будет поддерживать любые свойства, использующие дженерики, например List.

Второй — включение присвоения параметров локальным переменным.

Когда эти изменения применяются к pojo.mustache либо напрямую, либо переопределяя, результатом является создание пригодного для использования конструктора. Это работает как с генераторами swagger, так и с генераторами openapi.

public {{classname}}( {{#vars}} {{{datatypeWithEnum}}} {{baseName}}{{^-last}},{{/-last}} {{#-last}}){
  {{#vars}}
  this.{{baseName}} = {{baseName}};
  {{/vars}}
}{{/-last}}{{/vars}}

Ссылка:добавление конструкторов в код сгенерировано openapi codegen

person TomRed    schedule 15.05.2019