Как переопределить реализацию службы swgger-code-gen по умолчанию?

Я новичок в swagger codegen и использую версию 2.1.6. Я пытаюсь создать службу отдыха через yaml и swagger-codegen-maven. Ниже приведена часть pom.xml:

.....
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>${io.swagger.swagger-codegen-maven-plugin.version}</version>
<executions>
    <execution>
      <id>createprod</id>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <inputSpec>${project.basedir}/src/main/resources/swagger/rest-api-create-product.yaml</inputSpec>
            <language>io.swagger.codegen.languages.JavaResteasyServerCodegen</language>
          <!--   <templateDirectory>How_do_I_use_it</templateDirectory> -->

            <output>${project.build.directory}/generated-sources</output>
            <apiPackage>${swagger.resourcePackage}.handler</apiPackage>
            <modelPackage>${swagger.resourcePackage}.model</modelPackage>
            <invokerPackage>${swagger.resourcePackage}.handler</invokerPackage>
             <configOptions>
                 <sourceFolder>src/main/java</sourceFolder>
                 <interfaceOnly>true</interfaceOnly>
                 <configPackage>com.domain.service.configuration</configPackage>
                 <serializableModel>true</serializableModel>
             </configOptions>
        </configuration>
    </execution>
</executions>
  </plugin>

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.9.1</version>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>src/main/java</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>
</plugins>  

ServiceImpl, сгенерированный swagger:

import com.domain.servie.handler.*;
import com.domain.servie.model.*;


import com.domain.servie.model.InitSuccessResponse;
import com.domain.servie.model.FailureResponse;
import com.domain.servie.model.InitRequest;

import java.util.List;
import com.domain.servie.handler.NotFoundException;

import java.io.InputStream;

import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;

@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaResteasyServerCodegen", date = "2017-01-13T12:19:29.084-06:00")
public class InitWfApiServiceImpl extends InitWfApiService {

      @Override
      public Response createProductPost(String apiKey,InitRequest body,SecurityContext securityContext)
      throws NotFoundException {
      // do some magic!
      return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build();
  }

}

Здесь вместо return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); я хотел бы сопоставить обработку запросов с моим собственным обработчиком запросов, и я не хочу жестко кодировать его для отдыха API.

Идея в том, что rest-api можно использовать повторно (файл jar). Система, включающая rest-api в качестве зависимого jar-файла, позаботится о построении войны. Структура упаковки — это своего рода высеченное из камня требование, данное мне. :)

Кто-нибудь знает, как мне переопределить этот код ServiceImpl БЕЗ каких-то сумасшедших вещей, таких как переопределение DefaultCodeGen и т. Д.? Можно ли использовать шаблоны для достижения этого?

Любой вклад будет с благодарностью оценен.


person bkrish    schedule 13.01.2017    source источник


Ответы (2)


Шаблон, который генерирует эту часть кода, — этот. Вы должны иметь возможность добиться нужного поведения, изменив шаблон.

person moondaisy    schedule 20.01.2017
comment
После настройки шаблона усов я могу создать свою службу с помощью шаблона. Но я столкнулся со странным сценарием. поскольку у меня есть более одного API в yaml, я не смог настроить несколько сервисов для разных API. Поэтому обходной путь, который я использовал, заключался в создании нескольких yaml и запуске swagger-codegen. Любая идея, как разместить несколько сервисов без создания нескольких yaml? - person bkrish; 02.02.2017
comment
@bkrish Я рад, что это сработало, но я не знаю, как исправить ваш новый сценарий, но задайте новый вопрос, поскольку кто-то может знать. - person moondaisy; 02.02.2017
comment
Попался. Спасибо вам за помощь! - person bkrish; 03.02.2017
comment
нет объяснения того, как использовать templateDirectory для переопределения шаблонов? - person Matthew.Lothian; 23.04.2020

Если вы хотите использовать пользовательские шаблоны, вы можете использовать следующее:

В maven добавьте еще один плагин для загрузки зависимости maven, которая содержит пользовательские шаблоны, например, вы можете загрузить их в свой локальный артефакт. В данном случае артефакт называется swagger-templates и его версия 0.0.1.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-remote-resources-plugin</artifactId>
  <configuration>
    <resourceBundles>
      <resourceBundle>our.mvn.group:swagger-templates:0.0.1</resourceBundle>
    </resourceBundles>
  </configuration>
  <executions>
    <execution>
      <phase>initialize</phase>
      <goals>
        <goal>process</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Затем в разделе конфигурации swagger-codegen-maven-plugin убедитесь, что указан правильный каталог, добавьте следующее:

<templateDirectory>${project.build.directory}/maven-shared-archive-resources/subdir</templateDirectory>

Где subdir — это подкаталог в каталоге src/main/resources артефакта maven, который содержит пользовательские шаблоны. Вы можете поместить туда свои файлы с усами.

person Athaphian    schedule 02.02.2021