OpenApi 生成的接口方法的返回类型为 Object (Spring Boot 3)

问题描述 投票:0回答:1

我定义了一个 API 来注册用户。我想在用户注册成功后返回 SaveUserResponse。但是gradle build后生成的接口,返回类型为Object。

这是 userapi.yaml

paths:
  /signup:
    post:
      description: User registration API
      operationId: signup
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SignupRequest'

      responses:
        '201':
          description: CREATED
          content:
            application/json:
              schema:
                $ref: '#components/schemas/SaveUserResponse'


components:
  schemas:
    SignupRequest:
      type: object
      description: User model for GetARoom
      required:
        - firstName
        - lastName
        - email
        - password
      properties:
        firstName:
          type: string
          description: First name of the user
          minLength: 2
          maxLength: 15

        lastName:
          type: string
          description: Last name of the user
          minLength: 1
          maxLength: 15

        email:
          type: string
          description: User's email address.

        password:
          type: string
          format: password
          description: Password of the user
          pattern: /^(?=.*[0-9])(?=.*[a-z]).{8,12}$/
          minLength: 8
          maxLength: 12
    
    SaveUserResponse:
      type: object
      properties:
        accountNumber:
          type: integer
        userId:
          type: string

构建后生成如下界面。如果您注意到(第 55 行),注册的返回类型是

ResponseEntity<Object>
但我想返回
ResponseEntity <SaveUserResponse>
。我错过了什么?

enter image description here

我的build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.0'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    id 'org.openapi.generator' version '6.6.0'
}

group = 'com.ums'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

sourceSets {
    main {
        java {
            srcDirs("$buildDir/generated/openapi/src/main/java")
        }
    }
}

openApiGenerate {
    generatorName = "spring"
    inputSpec.set("$projectDir/src/main/resources/api/userapi.yaml")
    outputDir.set("$buildDir/generated/openapi")
    apiPackage.set("com.ums.userservice.api")
    modelPackage.set("com.ums.userservice.model")
    configOptions = [
            library : "spring-boot",
            useSpringBoot3: "true"
    ]

    additionalProperties = [
            dateLibrary: "java8",
            generateModels: true,
            generateApis: true,
            interfaceOnly: true,
            skipDefaultInterface: true,
            useBeanValidation: true,
            serializableModel: true
    ]
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation group: 'org.openapitools', name: 'jackson-databind-nullable', version: '0.2.6'


    implementation group: 'io.swagger.core.v3', name: 'swagger-annotations', version: '2.2.21'
    implementation group: 'io.swagger', name: 'swagger-annotations', version: '1.6.14'

    compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.24'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    annotationProcessor 'org.projectlombok:lombok:1.18.24'

    testCompileOnly 'org.projectlombok:lombok:1.18.24'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.24'
}

tasks.named('test') {
    useJUnitPlatform()
}

tasks.withType(JavaCompile) {
    dependsOn(tasks.openApiGenerate)
}
spring-boot swagger openapi openapi-generator swagger-codegen
1个回答
0
投票

发现问题:问题出在以下行

$ref: '#components/schemas/SaveUserResponse'
.

应该是

'#/components/schemas/SaveUserResponse'

© www.soinside.com 2019 - 2024. All rights reserved.