Catalyst :: Controller :: REST返回415不支持的媒体类型

时间:2014-01-29 14:52:31

标签: perl rest catalyst

我想通过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 ......但它没有帮助。

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

实施后,Catalyst Action REST会对请求进行内容协商,以确定要使用的序列化方法。默认设置只是后备,通常您在现实世界中的请求将包含内容类型。

有关支持的内容类型的文档以及如何在新的反序列化器中进行映射,请访问: enter link description here。另请注意,最新版本删除了对YAML的内置支持 如果您刚刚在浏览器中请求了网址,那么这将是text / html的默认响应。

使用Javascript

从真实浏览器中使用curl或test
curl -H "Content-Type: application/json" http://localhost:3000/rest/user/1

同时检查您安装的Catalyst版本,该版本将在您启动服务器时显示在信息行中。