Генерация Java-методов из swagger yaml для использования с моими собственными методами - PullRequest
0 голосов
/ 26 января 2019
---
swagger: "2.0"

definitions:
  Result:
    properties:
      data:
        type: string
        description: Some data result

  Payload:
    properties:
      id:
        required: true
        type: integer
      data:
        required: true
        type: string

После того, как я сгенерировал POJO Swagger, я создаю метод в таком классе, как этот.

 public Result sendMessage(int id, String data) throws IOException {
        return some_clazz.go(
                Result.class,
                new Payload().id(id).data(data)
        );
    }

Проблема в том, что у меня много разных определений, и я в значительной степени просто дублирую шаблон, поскольку каждое из них использует общий метод some_clazz.go (примечание: some_clazz использует genetics, следовательно, первый аргумент). Например:

 public AnotherResult sendMessage(int id) throws IOException {
        return some_clazz.go(
                AnotherResult.class,
                new DifferentPayload().id(id)
        );
    }

Есть ли способ, которым swagger (или что-то еще) может генерировать классы и методы из моих определений, которые могут быть переданы some_clazz.go?

1 Ответ

0 голосов
/ 11 марта 2019

Я не уверен, что следую тому, что делает some_clazz.go или что вы хотите отправить ему. Но, чтобы попытаться ответить на ваш вопрос - вы можете развернуть swagger-codegen.

Чтобы сделать это, вам нужно будет расширить текущий кодовый код swagger, расширив DefaultCodegen, или, более вероятно, расширить коден, который вы используете в данный момент (SpringCodegen, AbstractJavaCodegen и т. Д., В зависимости от того, что вам подходит). В ваш новый класс codegen вам нужно добавить новый шаблон

    public void processOpts() {
        super.processOpts();
        supportingFiles.add(new SupportingFile("someclazzgo.mustache", invokerFolder, "SomeClazzGoImpl.java"));

Так что теперь генератор возьмет someclazzgo.mustache и создаст SomeClazzGoImpl.java в соответствии с шаблоном, который вы создаете. Это зависит от вас, чтобы реализовать этот шаблон. Вы можете реализовать метод для каждой операции или класса, если это то, что вам нужно. Возможно, если вы дадите более подробную информацию о том, что вы пытаетесь сделать, я могу привести более конкретные примеры (вызывается ли some_clazz.go для каждого вызова или только для определенных API? Возвращает ли оно значение?)

Подробнее о расширении codegen в https://github.com/swagger-api/swagger-codegen#making-your-own-codegen-modules

...