2

我正在使用 Mojolicious Lite 创建一个 json Web 服务。

默认情况下,Mojolicious 会为服务器错误或未找到错误返回 HTML 响应。

有没有办法将其覆盖为自定义 JSON 响应?

4

3 回答 3

2

这里有两种方法:

  1. json用作应用程序的默认格式并使用not_found.*.json.ep模板

    use Mojolicious::Lite;
    app->renderer->default_format('json');
    app->start;
    __DATA__
    
    @@ not_found.development.json.ep
    {"not":"found","code":404,"data":{"key1":"value1","key2":[42,19,"value3"]}}
    
  2. before_render钩子覆盖 json 有效负载。

    use Mojolicious::Lite;
    hook before_render => sub {
        my ($c,$args) = @_;
        if ($args->{template} && $args->{template} eq 'not_found') {
            $args->{json} = { "too bad" => "so sad" };
        }
    };
    app->start;
    
于 2019-03-07T00:31:06.063 回答
1

已经过了一分钟,但在完整应用程序的 Mojo 9 中,我刚刚返回 JSON 并返回状态:

$c->render( json => $json, status => 404 );

但是,我在设置结束时还有一条包罗万象的路线:

$self->routes->any('/*')->to( ... );
于 2022-03-03T07:44:36.303 回答
0

渲染指南讨论了如何自定义这些响应。

于 2019-03-07T00:18:09.817 回答