Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 为什么我会得到;“内部服务器错误”;当我尝试使用JSON序列化程序从Dancer2路由返回对象时?_Perl_Dancer - Fatal编程技术网

Perl 为什么我会得到;“内部服务器错误”;当我尝试使用JSON序列化程序从Dancer2路由返回对象时?

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

我有一个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_-bited
convert_-bited
可以自动处理调用
到_-JSON
,但是我找不到有关Dancer2的文档。这是掉下来的东西吗

Dancer2不支持从路由处理程序返回任意对象。只能返回以下类型的对象:

  • 普拉克:回应
  • 舞者2::核心::响应
  • 舞者2::核心::响应::延迟
序列化之前会检查该类型,因此,如果不支持该对象类型,则永远不会调用序列化程序


看起来像是任意对象,但不再是了。解决方法是返回一个不受祝福的引用,正如您已经发现的那样。

Dancer2不支持从路由处理程序返回任意对象。只能返回以下类型的对象:

  • 普拉克:回应
  • 舞者2::核心::响应
  • 舞者2::核心::响应::延迟
序列化之前会检查该类型,因此,如果不支持该对象类型,则永远不会调用序列化程序

看起来像是任意对象,但不再是了。解决方法是返回一个不受祝福的引用,正如您已经发现的那样