Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

[JAVA] Enum field with default generated incorrectly

オープン
#12,469 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
45/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
fastapi, java, openapi, python
領域
api, tooling

調査の方向性

リンクされている openapi.json から始め、示されている swagger-codegen-cli の Java 生成コマンドを使って問題を再現します。生成された Java クラスで Task モデルの status のデフォルト値がどのように出力されるかを追跡し、その後、生成されたコードが TaskStatus enum 定数を使用し、正常にコンパイルできることを確認します。

索引モデルが issue の本文から書いたものです。

説明

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?

主要言語
Mustache
スター
17.8k
フォーク
6k
PR マージ指標
30日以内にマージされた PR はありません

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

swagger-api/swagger-codegen のほかの issue

swagger-api/swagger-codegen の issue をすべて見る

似ている issue

Backend & API Design の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。