首页 > 解决方案 > 是否可以在 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 ...
  }

标签: javaspring-bootspring-restcontrolleropenapi-generator

解决方案


为了自动生成 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

该解决方案并不理想,但可以解决问题。我希望将来该插件能够自行识别第二个,以避免同时输入它们。


推荐阅读