Perl 为什么我会得到;“内部服务器错误”;当我尝试使用JSON序列化程序从Dancer2路由返回对象时?
我有一个Dancer2应用程序,我想使用JSON序列化程序返回对象的序列化版本。下面是它的一个小版本:Perl 为什么我会得到;“内部服务器错误”;当我尝试使用JSON序列化程序从Dancer2路由返回对象时?,perl,dancer,Perl,Dancer,我有一个Dancer2应用程序,我想使用JSON序列化程序返回对象的序列化版本。下面是它的一个小版本: { package User; use Moo; use Types::Standard qw/Str/; has name => (is=>'ro',isa =>Str, default => ""); sub TO_JSON { return { %{ shift() } };} } use Dancer2; set serializer
{
package User;
use Moo;
use Types::Standard qw/Str/;
has name => (is=>'ro',isa =>Str, default => "");
sub TO_JSON { return { %{ shift() } };}
}
use Dancer2;
set serializer => 'JSON';
set engines=>{serializer=>{JSON=>{allow_blessed=>1,convert_blessed=>1}}};
get '/hello/:name' => sub {
my $user = User->new({name=>route_parameters->{name}});
return $user->TO_JSON; ## error if the TO_JSON method is not explicitly called.
};
dance;
1;
如果显式调用了TO_JSON
方法,那么显然该对象将作为哈希引用返回,然后序列化为:
{"name":"fred"}
举个例子。如果GET中的最后一行是
return $user;
然后返回以下错误:
{"title":"Error 500 - Internal Server Error","message":"","status":500,"exception":"Unrecognized response type from route: User.\n"}
我认为设置
allow_-bited
和convert_-bited
可以自动处理调用到_-JSON
,但是我找不到有关Dancer2的文档。这是掉下来的东西吗 Dancer2不支持从路由处理程序返回任意对象。只能返回以下类型的对象:
- 普拉克:回应
- 舞者2::核心::响应
- 舞者2::核心::响应::延迟
看起来像是任意对象,但不再是了。解决方法是返回一个不受祝福的引用,正如您已经发现的那样。Dancer2不支持从路由处理程序返回任意对象。只能返回以下类型的对象:
- 普拉克:回应
- 舞者2::核心::响应
- 舞者2::核心::响应::延迟