我正在使用 Mojolicious Lite 创建一个 json Web 服务。
默认情况下,Mojolicious 会为服务器错误或未找到错误返回 HTML 响应。
有没有办法将其覆盖为自定义 JSON 响应?
我正在使用 Mojolicious Lite 创建一个 json Web 服务。
默认情况下,Mojolicious 会为服务器错误或未找到错误返回 HTML 响应。
有没有办法将其覆盖为自定义 JSON 响应?
这里有两种方法:
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 );
但是,我在设置结束时还有一条包罗万象的路线:
$self->routes->any('/*')->to( ... );
渲染指南讨论了如何自定义这些响应。