collectionFormat:multi不使用Perl Mojolicious Swagger2

时间:2016-08-03 10:14:42

标签: perl yaml swagger mojolicious

我试图让我的API支持多个同名参数:例如

/myAPI/search?myfield=1&myfield=2&myfield=3

我使用Perl和cpan模块Mojolicious和Swagger2

我的招摇文件(yaml)有这个定义(经过验证):

/search:
    get:
      x-mojo-controller: "Search"
      operationId: search
      description: Search
      parameters:
        - name: myfield
          description: Array of types
          in: query
          type: array
          collectionFormat: multi
          uniqueItems: true
          items:
            type: string
          required: false

我的控制器看起来像这样:

package myAPI::Controller::Search;
use Mojo::Base 'Mojolicious::Controller';
sub search {
    my( $self, $args, $cb ) = @_;
    $self->render(text => Dumper $args);
}

当args被转储到浏览器时,myfield'字段似乎是一个数组,但它只有最后一个值。

$VAR1 = { 'myfield' => [ '3' ] };

Swagger2版本是:

our $VERSION = '0.83';

我做错了什么?

2 个答案:

答案 0 :(得分:3)

我认为你正在举起你的例子,或者你可能有一些混乱输入的钩子。以下测试成功运行:

DisplayName

已经对此进行了测试:https://github.com/jhthorsen/swagger2/blob/master/t/multi-param.t

答案 1 :(得分:1)

您可能希望尝试使用此插件:https://metacpan.org/release/Mojolicious-Plugin-OpenAPI

它更符合" mojolicious规则",意味着你会提取这样的参数:

sub search {
  my $c = shift->openapi->valid_input or return; 
  my $values = $c->every_param("myfield");
  $c->reply->openapi(200 => $values);
}