我正在尝试创建springdoc
swagger文档,我想表示一个数据类型为Map的请求主体
方法声明
@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);
但是我想以一种更容易理解的方式向引用我的API的客户机展示模式。我可以看到,在Github中存在一个没有适当解决方案的关闭票据。根据我的要求,请求主体应该是一个类型无关的动态键值对,因此除了以
Map的形式接收请求之外,没有其他方法
为了忽略SpringMVC支持的其他可注入参数,这是springdoc openapi库的默认行为。
如果你想改变这种行为,你可以如下所示:
SpringDocUtils.getConfig().removeRequestWrapperToIgnore(Map.class);
分享我的工作方法的问题,我已经做了一个变通方法为@io.swagger.v3.oas.annotations.parameters.请求体(内容=@内容(模式=@模式(实现=Map.class)
模式来作为字符串问题。
我在OpenAPI bean声明中声明了一个名为Map的自定义模式,如下所示
new OpenAPI()
.components(new Components()
.addSchemas("Map", new Schema<Map<String, Object>>().addProperties("< * >", new ObjectSchema())
))
.....
.....
并在模式声明中使用上述模式,如下所示
@io.swagger.v3.oas.annotations.parameters.RequestBody(
content = @Content(mediaType = APPLICATION_JSON_VALUE,
schema = @Schema(ref = "#/components/schemas/Map"))
上述方法可用于代替ApiResponse,如下所示
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200",
content = @Content(mediaType = APPLICATION_JSON_VALUE,
schema = @Schema(ref = "#/components/schemas/Map"))
注意:如果我们使用上述自定义模式方法,我们不需要更改或忽略任何类型,其中SpringDoc
内部使用。
我有一个APIendpoint,请求体需要一个HashMap。关于如何修复“示例值”问题的信息不多。普拉桑的回答让我找到了正确的地方。我张贴我的解决方案的完整性,但所有的功劳归他所有。(附言:我试图支持他的回答,但我没有足够的“分数”)
配置方面:
@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)
);
}
}
控制器端:
@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
}
我正在使用swagger ui,试图标准化API文档。我意识到,对于使用主体参数因而需要显示模型和模型模式的动词(GET、PUT、POST等),模式是在资源级别定义的(在pet store示例中为/pet或/store)。然而,在我们的API中,所需的主体参数将随着动词的变化而变化,最好为每个动词建立一个模型来准确反映这一点。 中模型定义的当前版本http://petstore.swagger.w
我正在尝试为Swagger中的项目获取模型模式。我想通过一个http请求来实现这一点,该请求来自不同于托管Swagger的机器。 我可以从以下位置获取作为json的Swagger API文档: 该响应包含: 是否有任何方法获取“/definitions/Item”模型模式? 我想做一个http获取,比如: 我使用的是Swagger 2.0版。 谢谢
我使用springdoc-openapi-用户界面为Spring启动API留档,并面临以下问题- 我添加了所有必要的配置,如下所示- maven依赖- 使用java版本11,不确定问题出在哪里,项目无法运行。
我正在使用Springdoc来记录我在Spring Boot中制作的REST API。我需要从Swagger UI的模式部分隐藏一些模型/模式,这些模型/模式只在应用编程接口内部使用,所以没有必要在模式部分显示它们。 这是我试图隐藏的模型之一: 上图所示模型的超类: 这些示例中的大多数注释都来自JPA或Lombok。需要明确的是:在Schemas部分不可见–我在这里包括它只是为了以防万一。 到目前
我尝试使用swagger来描述JSON API。到目前为止,它看起来不错,但我无法弄清楚如何使用anyOf结构在JSON答案中定义不同对象类型的数组。 以下JSOn模式是有效的,它应该描述一组文章和视频JSON对象: 有没有可能在摇摆不定中使这项工作发挥作用?
我想知道您是否可以在hasNext(字符串模式)中指定要扫描的内容。例如,我想检索正在扫描的行的前三个字符。那么有没有办法指定诸如 在这里我要抓取该行的前3个字母字符。