У меня есть приложение 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. Это что-то сбросили?