OpenAPI CodeGen для объектов Spring-Webflux / Mono или Flux в качестве возврата - PullRequest
0 голосов
/ 25 ноября 2018

Новейшая версия OpenApi Codegen (и его плагин Maven) позволяют / должны иметь возможность автоматически генерировать интерфейсы для Spring Maven с возвращаемыми объектами Webflux / Reative (например, объектами Mono или Flux).Но я не вижу возможности заставить его работать.Это отрывки из моего pom.xml:

    <plugin>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-codegen-maven-plugin</artifactId>
        <version>${swagger.codegen.version}</version>
        <executions>
        <!-- AUTHENTICATION-API -->
            <execution>
              <id>authentication-api</id>
              <goals>
                <goal>generate</goal>
              </goals>
              <configuration>
                <inputSpec>src/main/resources/swagger/authentication.yaml</inputSpec>
                <language>spring</language>
                <configOptions>
                  <sourceFolder>src/main/java</sourceFolder>
                    <library>spring-boot</library>
                    <!-- <async>true</async> -->
                    <reactive>true</reactive>
                    <dateLibrary>java8</dateLibrary>
                    <useTags>true</useTags>
                    <apiPackage>${project.groupId}.api</apiPackage>
                    <modelPackage>${project.groupId}.model</modelPackage>
                    <interfaceOnly>true</interfaceOnly>
                </configOptions>
              </configuration>
            </execution>
         </executions>
</plugin>

А это отрывки из authentication.yaml и сгенерированного интерфейса

authentication.yaml

paths:
  /dotcmsAuthentication:
    get:
      tags:
        - authentication
        - dotCMS
      description: Returns dotCMS json with JWT Token.
      operationId: getDotcmsAuthentication
      produces:
        - application/json
      consumes:
        - application/json
      parameters:
        - name: DotcmsAuthentication
      in: header
          required: true
          schema:
            type: string
            example: '{"user":"username", "password":"password"}'
      responses:
        '200':
          description: Successful authentication
          schema:
            $ref: '#/definitions/UserAuthentication'
        '401':
          description: Malformed authentication header
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MalformedAuthenticationHeaderError'
        '400':
          description: BAD_REQUEST error
          content:
            application/json:
              schema:
                 $ref: '#/components/schemas/RequestError'

иинтерфейс аутентификации auto-generaten:

@ApiOperation(value = "", nickname = "getDotcmsAuthentication", notes = "Returns dotCMS json with JWT Token.", response = UserAuthentication.class, tags={ "authentication","dotCMS", })
@ApiResponses(value = { 
    @ApiResponse(code = 200, message = "Successful authentication", response = UserAuthentication.class),
    @ApiResponse(code = 400, message = "BAD_REQUEST error"),
    @ApiResponse(code = 401, message = "Malformed authentication header") })
@RequestMapping(value = "/dotcmsAuthentication",
    produces = { "application/json" }, 
    consumes = { "application/json" },
    method = RequestMethod.GET)
default ResponseEntity<UserAuthentication> getDotcmsAuthentication(@ApiParam(value = "" ,required=true) @RequestHeader(value="DotcmsAuthentication", required=true) String dotcmsAuthentication) {
    if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
        if (getAcceptHeader().get().contains("application/json")) {
            try {
                return new ResponseEntity<>(getObjectMapper().get().readValue("{  \"jwtToken\" : \"jwtToken\"}", UserAuthentication.class), HttpStatus.NOT_IMPLEMENTED);
            } catch (IOException e) {
                log.error("Couldn't serialize response for content type application/json", e);
                return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
            }
        }
    } else {
        log.warn("ObjectMapper or HttpServletRequest not configured in default AuthenticationApi interface so no example is generated");
    }
    return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
}

Теперь главный вопрос: как мне получить openapi-codegen для генерации MONO и Flux объектов вместо этих ResponseEntity Объекты?

Если вам нужно знать какие-либо другие детали, чтобы помочь мне, просто скажите мне, и я предоставлю их.Благодаря.

...