我想通过Catalyst编写restful api,并使用[Catalyst :: Controller :: REST] [1]。
我写了那段代码。
package addressbook::Controller::REST;
use strict;
use warnings;
use base qw(Catalyst::Controller::REST);
sub user :Local :ActionCLass('REST') :Args(1){
my( $self, $c, $id ) = @_;
$c->stash( id => $id );
}
# Get user
sub user_GET {
my ( $self, $c ) = @_;
my $user = $c->model('DB::User')->find( { id => $c->stash->{id} } );
if ( $user ){
$self->status_ok($c, entity => { firstname => $user->firstname } );
}
else {
$self->status_not_found($c, message => 'No matching user');
}
}
__PACKAGE__->config(default => 'text/x-json');
1;
然后我运行服务器,转到localhost:3000 / rest / user / 1(我有用户的id)并获得
无法找到客户支持的内容类型。
我尝试设置 PACKAGE - >配置应用程序/ json,text / xml,text / html,text / x-yaml ......但它没有帮助。
有什么想法吗?
感谢。
答案 0 :(得分:1)
实施后,Catalyst Action REST会对请求进行内容协商,以确定要使用的序列化方法。默认设置只是后备,通常您在现实世界中的请求将包含内容类型。
有关支持的内容类型的文档以及如何在新的反序列化器中进行映射,请访问: enter link description here。另请注意,最新版本删除了对YAML的内置支持 如果您刚刚在浏览器中请求了网址,那么这将是text / html的默认响应。
使用Javascript
从真实浏览器中使用curl或testcurl -H "Content-Type: application/json" http://localhost:3000/rest/user/1
同时检查您安装的Catalyst版本,该版本将在您启动服务器时显示在信息行中。