Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[JAVA] Enum field with default generated incorrectly

Abierto
#12,469 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
fastapi, java, openapi, python
Área
api, tooling

Línea de trabajo

Comienza con el openapi.json enlazado y reproduce el problema usando el comando mostrado de generación de Java de swagger-codegen-cli. Rastrea cómo se representa el valor predeterminado del estado del modelo Task en la clase Java generada y, a continuación, verifica que el código generado use la constante del enum TaskStatus y compile correctamente.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Description

I have a fastapi defined interface with a enum (TaskStatus) and a structure (Task) containing an instance of that enum with a default.

I extract the openapi.json from the running fastapi using wget.

Then I generate the Java client code using swagger codegen.

The enum is generated just fine, but the default value in the object is missing the Enum type. I'm wondering if I'm missing something I need to add to the fastapi main.py or the generated openapi.json.

main.py:

from typing import Union
from enum import Enum
from pydantic import BaseModel

from fastapi import FastAPI

app = FastAPI()

class TaskStatus(str,Enum):
    NIL = "NIL"
    NOT_APPROVED = "NOT_APPROVED"    
    NOT_READY = "NOT_READY"                  
    NOT_ASSIGNED = "NOT_ASSIGNED"      
    PENDING = "PENDING"               
    EXECUTING = "EXECUTING"          
    DONE = "DONE"                 

class Task(BaseModel):
    '''Base class for tasks'''

    task_id: int = -1
    '''ID of the task'''
    
    status: TaskStatus = TaskStatus.NOT_ASSIGNED
    '''Status of task to be tracked throughout runtime'''

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/task/{task_id}")
def read_task(task_id: int ) -> Task:
    task = Task( id = task_id )
    return task

generated java enum:

public enum TaskStatus {
  NIL("NIL"),
  NOT_APPROVED("NOT_APPROVED"),
  NOT_READY("NOT_READY"),
  NOT_ASSIGNED("NOT_ASSIGNED"),
  PENDING("PENDING"),
  EXECUTING("EXECUTING"),
  DONE("DONE");

INVALID generated java Task class - enum default value should be TaskStatus.NOT_ASSIGNED:

public class Task {
  @JsonProperty("task_id")
  private Object taskId = -1;

  @JsonProperty("status")
  private TaskStatus status = NOT_ASSIGNED;
Swagger-codegen version

swagger-codegen-cli-3.0.61.jar

Swagger declaration file content or url

Full openapi.json

snip:

{
....
        "/task/{task_id}": {
            "get": {
                "summary": "Read Task",
                "operationId": "read_task_task__task_id__get",
                "parameters": [{
                        "name": "task_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "title": "Task Id"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful Response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Task"
                                }
                ...
    },
    "components": {
        "schemas": {
         ...
            "Task": {
                "properties": {
                    "task_id": {
                        "type": "integer",
                        "title": "Task Id",
                        "default": -1
                    },
                    "status": {
                        "$ref": "#/components/schemas/TaskStatus",
                        "default": "NOT_ASSIGNED"
                    }
                },
                "type": "object",
                "title": "Task",
                "description": "Base class for tasks"
            },
            "TaskStatus": {
                "type": "string",
                "enum": ["NIL", "NOT_APPROVED", "NOT_READY", "NOT_ASSIGNED", "PENDING", "EXECUTING", "DONE"],
                "title": "TaskStatus"
            },

Command line used for generation

wget http://127.0.0.1:8000/openapi.json

java -jar swagger-codegen-cli-3.0.61.jar generate -l java -i openapi.json -Dlibrary=jersey1,hideGenerationTimestamp=true -o java-jersey1

Steps to reproduce

regenerate the code with the linked openapi.json

Maybe I'm missing something somewhere?

Lenguaje dominante
Mustache
Estrellas
17.8k
Forks
6k
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de swagger-api/swagger-codegen

Todos los issues de swagger-api/swagger-codegen

Issues similares

Más issues de Backend & API Design

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.