swagger-codegen-generators icon indicating copy to clipboard operation
swagger-codegen-generators copied to clipboard

[Java] Enum String scheme generates invalid enum class

Open roded opened this issue 4 years ago • 0 comments

openapi: 3.0.1
info:
  version: 1.0.0
  title: Test
servers:
  - url: /
tags:
  - name: test
paths:
  /repository:
    get:
      tags:
        - test
      operationId: test
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/requestStatus'
components:
  schemas:
    requestStatus:
      type: string
      enum: [ a,b,c ]

The above specification, generates the following enum RequestStatus class:

/*
 * Test
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * OpenAPI spec version: 1.0.0
 * 
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */

package io.model9.appextract.openapi.models;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.annotations.SerializedName;
import javax.validation.constraints.*;
import javax.validation.Valid;
import java.io.IOException;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;

/**
 * Gets or Sets requestStatus
 */
@JsonAdapter(RequestStatus.Adapter.class)
public enum RequestStatus {
  A("a"),
  B("b"),
  C("c");

  private String value;

  RequestStatus(String value) {
    this.value = value;
  }

  public String getValue() {
    return value;
  }

  @Override
  public String toString() {
    return String.valueOf(value);
  }

  public static RequestStatus fromValue(String input) {
    for (RequestStatus b : RequestStatus.values()) {
      if (b.value.equals(input)) {
        return b;
      }
    }
    return null;
  }

  public static class Adapter extends TypeAdapter<RequestStatus> {
    @Override
    public void write(final JsonWriter jsonWriter, final RequestStatus enumeration) throws IOException {
      jsonWriter.value(String.valueOf(enumeration.getValue()));
    }

    @Override
    public RequestStatus read(final JsonReader jsonReader) throws IOException {
      Object value = jsonReader.nextString();
      return RequestStatus.fromValue(()(value));
    }
  }
}

Note the last return line in the class: return RequestStatus.fromValue(()(value));

I'm using the org.hidetake.swagger.generator gradle plugin and io.swagger.codegen.v3:swagger-codegen-cli:3.0.30

roded avatar Dec 16 '21 12:12 roded