X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FAction%2FDeserialize.pm;h=f978aac9160e5ac227cee300a5b196cfd205b409;hb=b3996af85ac6bea294c4d4b82167429f5694a694;hp=8e49caa79a04739514463300be1b939ff8f7c866;hpb=599755b6a0b227aedd1fc2c14044fedf5beeaaf4;p=catagits%2FCatalyst-Action-REST.git diff --git a/lib/Catalyst/Action/Deserialize.pm b/lib/Catalyst/Action/Deserialize.pm index 8e49caa..f978aac 100644 --- a/lib/Catalyst/Action/Deserialize.pm +++ b/lib/Catalyst/Action/Deserialize.pm @@ -8,7 +8,7 @@ use Module::Pluggable::Object; use MRO::Compat; use Moose::Util::TypeConstraints; -our $VERSION = '0.90'; +our $VERSION = '1.01'; $VERSION = eval $VERSION; has plugins => ( is => 'rw' ); @@ -35,7 +35,7 @@ sub execute { my $self = shift; my ( $controller, $c ) = @_; - if ( $self->_deserialize_handles_http_method($c->request->method) ) { + if ( !defined($c->req->data) && $self->_deserialize_handles_http_method($c->request->method) ) { my ( $sclass, $sarg, $content_type ) = $self->_load_content_plugins( 'Catalyst::Action::Deserialize', $controller, $c ); @@ -47,9 +47,9 @@ sub execute { $rc = $sclass->execute( $controller, $c ); } if ( $rc eq "0" ) { - return $self->_unsupported_media_type( $c, $content_type ); + return $self->unsupported_media_type( $c, $content_type ); } elsif ( $rc ne "1" ) { - return $self->_serialize_bad_request( $c, $content_type, $rc ); + return $self->serialize_bad_request( $c, $content_type, $rc ); } } @@ -120,6 +120,13 @@ Will work just fine. When you use this module, the request class will be changed to L. +=head1 CUSTOM ERRORS + +For building custom error responses when de-serialization fails, you can create +an ActionRole (and use L to apply it to the +C action) which overrides C and/or C<_serialize_bad_request> +methods. + =head1 SEE ALSO You likely want to look at L, which implements