gpt4 book ai didi

spring-boot - Swagger 声明 schema = @Schema(implementation = Map.class) 在 swagger-ui 中将 Schema 表示为 String

转载 作者:行者123 更新时间:2023-12-04 15:58:00 36 4
gpt4 key购买 nike

我正在尝试创建 springdoc swagger 文档,我想代表一个具有数据类型 Map<String, Object> 的请求正文以更好的方式为客户提供可读性。但是当我声明 @io.swagger.v3.oas.annotations.parameters.RequestBody(content = @Content(schema = @Schema(implementation = Map.class)架构即将作为 String (附上下面的截图)
enter image description here
方法声明

        @Operation(security = {@SecurityRequirement(name = "bearer-key")}, summary = "Create Data", operationId = "createData", description = "Create createData for the **`type`**. ")
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "Data created", content = @Content(schema = @Schema(implementation = Map.class),
examples = {@ExampleObject(value = "{\n" +
" \"id\": \"927d810c-3ac5-4584-ba58-7c11befabf54\",\n" +
"}")})),
@ApiResponse(responseCode = "400", description = "BAD Request")})
@PostMapping(value = "/data/type", produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
@io.swagger.v3.oas.annotations.parameters.RequestBody(content = @Content(schema = @Schema(implementation = Map.class),
examples = {@ExampleObject(value = "{\n" +
" \"label\":\"tourism\",\n" +
" \"location\":\"France\"\n" +
" }")}))
ResponseEntity<Map<String, Object>> createData(@Parameter(name = "type", required = true) @PathVariable("type") String type, @Parameter(name = "request payload") @Valid @RequestBody Map<String, Object> body);

虽然Spring boot会根据方法签名自动推断类型,但数据类型 Map不清楚.例如,默认情况下,类型 Map 将被推断如下
enter image description here
但我想以更易于理解的方式向引用我的 API 的客户展示 Schema。我可以在 Github 中看到没有正确解决方案的已关闭票证.根据我的要求,请求正文应该是类型不可知的动态键值对,因此除了以 Map<String, Object> 接收请求之外别无他法。 .有没有人用 Map 类型实现了更好的方法而不是创建自定义请求/响应模型?

最佳答案

我有一个 API 端点,请求正文需要一个 HashMap。关于如何解决“示例值”问题的信息不多。 Prasanth's answer带我到正确的地方。为了完整性,我发布了我的解决方案,但所有功劳都归功于他。 (PS:我试图对他的回答投赞成票,但我没有足够的“积分”)
配置方面:

@Configuration
@OpenAPIDefinition
public class DocsConfiguration {
@Bean
public OpenAPI customOpenAPI() {
Schema newUserSchema = new Schema<Map<String, Object>>()
.addProperties("name",new StringSchema().example("John123"))
.addProperties("password",new StringSchema().example("P4SSW0RD"))
.addProperties("image",new StringSchema().example("https://robohash.org/John123.png"));

return new OpenAPI()
//.servers(servers)
.info(new Info()
.title("Your app title")
.description("App description")
.version("1.0")
.license(new License().name("GNU/GPL").url("https://www.gnu.org/licenses/gpl-3.0.html"))
)
.components(new Components()
.addSchemas("NewUserBody" , newUserSchema)
);
}
}
Controller 端:
    @io.swagger.v3.oas.annotations.parameters.RequestBody(
content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
schema = @Schema(ref = "#/components/schemas/NewUserBody")))
@PostMapping("/v1/users")
public Response<User> upsertUser(@RequestBody HashMap<String,Object> user) {
//Your code here
}

关于spring-boot - Swagger 声明 schema = @Schema(implementation = Map.class) 在 swagger-ui 中将 Schema 表示为 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65010272/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com