如何将未找到的Mojolicious Lite默认错误更改为自定义json响应

时间:2019-03-06 22:58:34

标签: perl mojolicious mojolicious-lite

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

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

是否可以将其覆盖为自定义JSON响应?

2 个答案:

答案 0 :(得分:1)

Rendering guide讨论了如何自定义这些响应。

答案 1 :(得分:1)

有两种方法:

  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;