我试图让我的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';
我做错了什么?
答案 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);
}