Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[JAVA] Enum field with default generated incorrectly

Đang mở
#12,469 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
45/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
fastapi, java, openapi, python
Lĩnh vực
api, tooling

Hướng nghiên cứu

Bắt đầu với openapi.json được liên kết và tái hiện vấn đề bằng lệnh tạo Java của swagger-codegen-cli được hiển thị. Theo dõi cách giá trị mặc định của status của model Task được biểu diễn trong lớp Java được tạo, sau đó xác minh rằng mã được tạo sử dụng hằng enum TaskStatus và biên dịch thành công.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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?

Ngôn ngữ chính
Mustache
Star
17.8k
Fork
6k
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của swagger-api/swagger-codegen

Tất cả issue của swagger-api/swagger-codegen

Issue tương tự

Thêm issue về Backend & API Design

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.