我有一个带有@RequestBody
DTO的控制器。我需要在Swagger的RequestBody模式中显示DTO的模式,而不是默认的string
。
通过在API上使用@Operation并在中使用@Parameter,我已经能够在两个地方描述DTO
我在@Operation
(在requestBody下)和@Parameter
注解中尝试了@Schema
,前者抛出NPE,后者什么也不做,并在DTO本身中尝试了各种对应的注解。
样品控制器
@RequestMapping(value = "/{myPathVar}", method = RequestMethod.POST)
@Operation(summary = "Create something.",
parameters = { @Parameter(in = ParameterIn.PATH, name = "myPathVar", description = "Some path variable. Swagger uses this description.") },
requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(
description = "My description here.",
content = @Content(examples = @ExampleObject("{\"A\" : \"a\",\"B\" : \"{\"b\" : \"foo\", \"bb\" : \"bar\"}"))))
@ApiResponse(content = @Content(schema = @Schema(implementation = MyReturningType.class)))
public MyReturningType doSomethingCool(
@Parameter(description = "Some description Swagger ignores.", example = "123") @PathVariable(value = "myPathVar") int myPathVar,
@Parameter(description = "My other description here.", schema = @Schema(implementation = MyDto.class)) @RequestBody MyDto dto) {
// do something cool
}
DTO示例
// Do I need certain annotations here?
public class MyDto {
// What annotation goes here? @Parameter, @JsonProperty, @Schema, something else?
private int someInt;
private String someString;
private Object someObject;
}
我需要哪种注解组合来正确标记DTO中的DTO模式,然后从控制器引用此模式,以便在SwaggerUI中填充模式字段?
2条答案
按热度按时间0ejtzxu11#
这个问题可能是由于DTO中的字段是私有可见的,并且从共享的代码来看,这些字段似乎没有可用的getter和setter。
有关如何完成此操作的工作示例,请参阅以下示例
控制器
DTO
这将为您提供如下输出
mspsb9vt2#
我给你的dto做了如下注解。它对我很有效