如何将找不到的 Mojolicious Lite 默认错误更改为自定义 json 响应
How to change Mojolicious Lite default error not found to a custom json response
我正在使用 Mojolicious Lite 创建 json 网络服务。
默认情况下,Mojolicious returns HTML 对服务器错误或未找到错误的响应。
有没有办法将其覆盖为自定义 JSON 响应?
Rendering guide 讨论了如何自定义这些响应。
这里有两种方法:
使用 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"]}}
使用 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;
一分钟过去了,但在 Mojo 9 的完整应用程序中,我刚刚返回 JSON 并返回状态:
$c->render( json => $json, status => 404 );
但是,我在设置的最后还有一条 catch-all 路线:
$self->routes->any('/*')->to( ... );
我正在使用 Mojolicious Lite 创建 json 网络服务。
默认情况下,Mojolicious returns HTML 对服务器错误或未找到错误的响应。
有没有办法将其覆盖为自定义 JSON 响应?
Rendering guide 讨论了如何自定义这些响应。
这里有两种方法:
使用
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"]}}
使用
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;
一分钟过去了,但在 Mojo 9 的完整应用程序中,我刚刚返回 JSON 并返回状态:
$c->render( json => $json, status => 404 );
但是,我在设置的最后还有一条 catch-all 路线:
$self->routes->any('/*')->to( ... );