Web::Request::Role::JSON - Make handling JSON easier in Web::Request
version 1.004
# Create a request handler
package My::App::Request;
use Moose;
extends 'Web::Request';
with 'Web::Request::Role::JSON';
# Make sure your app uses your request handler, e.g. using OX:
package My::App::OX;
sub request_class {'My::App::Request'}
# Finally, in some controller action
sub create_POST {
my ($self, $req) = @_;
my $data = $req->json_payload;
my $created = $self->model->create($data);
return $self->json_response($created, undef, 201);
}
Web::Request::Role::JSON
provides a few methods that make handling
JSON in Web::Request a bit easier.
Please note that all methods return a Web::Response object.
Depending on the framework you use (or lack thereof), you might have
to call finalize
on the response object to turn it into a valid
PSGI response.
my $perl_hash = $req->json_payload;
Extracts and decodes a JSON payload from the request.
$req->json_response( $data );
$req->json_response( $data, $header_ref );
$req->json_response( $data, $header_ref, $http_status );
Convert your data to JSON and generate a new response with correct HTTP headers.
You can pass in more headers as the second argument (either hashref or
arrayref). These headers will be passed straight on to
HTTP::Headers->new()
.
You can also pass a HTTP status code as the third parameter. If none
is provided, we default to 200
.
$req->json_response( 'something is wrong' );
$req->json_response( $error_data );
$req->json_response( $error, $status );
Generate a JSON object out of your error message, if the message is a plain string. But you can also pass in a data structure that will be converte to JSON.
Per default, HTTP status is set to 400
, but you can pass any other
status as a second argument. (Yes, there is no checking if you pass a
valid status code or not. You're old enough to not do stupid things..)
Thanks to
- validad.com for supporting Open Source.
Thomas Klausner domm@cpan.org
This software is copyright (c) 2017 by Thomas Klausner.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.