我有一个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 => '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_blessed
和convert_blessed
会自动处理TO_JSON
,但是我无法找到关于Dancer2的文档。这件事被丢弃了吗?
答案 0 :(得分:0)
Dancer2不支持从路由处理程序返回任意对象。您只能返回following types:
的对象在序列化之前检查类型,因此如果不支持对象类型,则永远不会调用序列化程序。
看起来任意对象都是supported at one point,但不再是。{解决方法是返回一个非祝福的引用,正如您已经发现的那样。