java - 是否可以在 REST 控制器中使用 @Parameter?
问题描述
我正在尝试@Parameter
在 a 中使用路径参数@RestController
,但它忽略了该参数。
注意@PathVariable
:如果我改用(评论),一切都会很好。但是,@PathVariable
不会生成具有自动生成的所有属性(如“描述”、“参考”等)的 OpenAPI yaml 文件springdoc-openapi-maven-plugin
。
是否可以@Parameter
在 REST 控制器中使用?
这是我的代码:
@RequestMapping("/channels")
@RestController
public class ChannelRESTController {
@PostMapping("{channelId}/connect")
@Operation(summary = "Initiates a session to a channel", tags = { "session" })
@ResponseBody
ResponseEntity<?> connect( //
@Parameter(name = "channelId", in = ParameterIn.PATH,
required = true, description = "The channel id") String channelId,
// @PathVariable(required = true) String channelId,
@Parameter(description = "Credentials' username") String username,
@Parameter(description = "Credentials' password") String password
) {
System.out.println(
"Starting channel #" + channelId); // displays null :(
return ...
}
解决方案
为了自动生成 OpenAPI YAML 文件,可以将两个注释都添加到参数中。
总之,channelId
上面的参数可以注释为:
@PathVariable(required = true)
@Parameter(name = "channelId", in = ParameterIn.PATH,
required = true, description = "The channel id")
String channelId,
在这种情况下:
- 第一个注释
@PathVariable
允许 Spring 从 URL 中检索参数。 - 第二个注释在插件
@Parameter
生成的 OpenAPI (YAML) 文件中生成正确的描述springdoc-openapi-maven-plugin
。
该解决方案并不理想,但可以解决问题。我希望将来该插件能够自行识别第二个,以避免同时输入它们。
推荐阅读
- javascript - 在指定位置替换部分字符串
- ios - 如果 subscribeOn 背景,RxSwift TestScheduler 不起作用
- c# - 如何从强名称程序集中加载 ResourceDictionary?
- javascript - 即使在 DOM 加载时,jQuery 也会重复点击
- html - SVG rect 动画高度从下到上
- javascript - 通过单击外部来关闭 PopOut DIV。使用 JS
- hyperledger-fabric - 无法添加新的 Fabric 对等点作为锚点对等点
- r - 从excel文件中读入分布向量
- php - 登录会话当前日期
- python - 从多个 DataFrames Python 中收集重复的列名