首页 > 解决方案 > 无法在 Open API 3 中将类型“java.lang.String”的属性值转换为所需类型

问题描述

我有一个带有这种方法的@RestController

@RestController
public MyController {

@Operation(summary = "Some text", description = "Some text again"
@GetMapping("/route")
public MyClassResponse getSomething(
@Parameter(name = "My request", description = "My request") MyRequest request
) {

    // to do smth

    return response
}

MyRequest 在哪里

public class MyRequest {

private int param1;

private String param2;

private MyClass param3;

}

MyClass 看起来像

public class MyClass {

private int clazzParam1;
private int clazzParam2;
}

首先,Swagger 像 body 一样显示参数 MyRequest

{
"param1" : 0;
"param2" : "string",
"param3" : {
    "clazzParam1" : 0,
    "clazzParam2" : 0
    }
}

但我想看到这样的每个参数

其次,当我尝试提出请求时,我得到了这个 curl

http://localhost:8080/route?param1=0¶m2=string¶m3=clazzParam1,0,clazzParam2,0

反而

http://localhost:8080/route?param1=0¶m2=string¶m3.clazzParam1=0¶m3.clazzParam2=0

因此响应包含下一个失败无法将类型“java.lang.String”的属性值转换为属性“param3”所需的类型“MyClass”。

我应该如何使用注释来获得我想要的东西?由于各种原因,我不能使用 .yaml 描述。谢谢你。

标签: javaswaggeropenapi

解决方案


@ParameterObject 是答案。它将对象解包到 Swagger UI 中的参数


推荐阅读