Skip to content

Exception in updating resource via ContentNegotiator for multipart/form-data: Expecting request to contain a JSON API document. #369

Description

@vlavlad

Hi, thanks for this very useful package for Laravel.

I developed the ContentNegotiator for mine resource as you represented it here. It's working correctly for multipart/form-data in uploading the image. But I've faced with the issue when I'm sending the PATCH request to update the image /api/v1/storage-images/42
The API throws the error "Expecting request to contain a JSON API document." I checked that is likely related to the difference between the validateDocument method in UpdateResource and classes CreateResource.

1) Is there any way to move on this issue or updating must work only with "Content-Type: application/vnd.api+json"?

2) Does documentation has an example of an implementation for updating the resource with multipart/form-data content-type?

Here is the call stack:
[2019-06-16 08:37:02] local.ERROR: Expecting JSON API document to be an object. {"userId":1,"email":"dasdas@ddd.com","exception":"[object] (CloudCreativity\LaravelJsonApi\Exceptions\InvalidArgumentException(code: 0): Expecting JSON API document to be an object. at /var/www/dev-local-server/vendor/cloudcreativity/laravel-json-api/src/Validation/Spec/AbstractValidator.php:75)
[stacktrace]
#0 /var/www/dev-local-server/vendor/cloudcreativity/laravel-json-api/src/Validation/Spec/CreateResourceValidator.php(67): CloudCreativity\LaravelJsonApi\Validation\Spec\AbstractValidator->__construct(Object(CloudCreativity\LaravelJsonApi\Store\Store), Object(CloudCreativity\LaravelJsonApi\Validation\ErrorTranslator), NULL)
#1 /var/www/dev-local-server/vendor/cloudcreativity/laravel-json-api/src/Validation/Spec/UpdateResourceValidator.php(59): CloudCreativity\LaravelJsonApi\Validation\Spec\CreateResourceValidator->__construct(Object(CloudCreativity\LaravelJsonApi\Store\Store), Object(CloudCreativity\LaravelJsonApi\Validation\ErrorTranslator), NULL, 'storage-images')
#2 /var/www/dev-local-server/vendor/cloudcreativity/laravel-json-api/src/Factories/Factory.php(390): CloudCreativity\LaravelJsonApi\Validation\Spec\UpdateResourceValidator->__construct(Object(CloudCreativity\LaravelJsonApi\Store\Store), Object(CloudCreativity\LaravelJsonApi\Validation\ErrorTranslator), NULL, 'storage-images', '42')
#3 /var/www/dev-local-server/vendor/cloudcreativity/laravel-json-api/src/Http/Requests/UpdateResource.php(85): CloudCreativity\LaravelJsonApi\Factories\Factory->createExistingResourceDocumentValidator(NULL, 'storage-images', '42')
#4 /var/www/dev-local-server/vendor/cloudcreativity/laravel-json-api/src/Http/Requests/ValidatedRequest.php(266): CloudCreativity\LaravelJsonApi\Http\Requests\UpdateResource->validateDocument()
#5 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Foundation/Providers/FormRequestServiceProvider.php(30): CloudCreativity\LaravelJsonApi\Http\Requests\ValidatedRequest->validateResolved()
#6 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Container/Container.php(1069): Illuminate\Foundation\Providers\FormRequestServiceProvider->Illuminate\Foundation\Providers\{closure}(Object(CloudCreativity\LaravelJsonApi\Http\Requests\UpdateResource), Object(Illuminate\Foundation\Application))
#7 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Container/Container.php(1033): Illuminate\Container\Container->fireCallbackArray(Object(CloudCreativity\LaravelJsonApi\Http\Requests\UpdateResource), Array)
#8 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Container/Container.php(1018): Illuminate\Container\Container->fireAfterResolvingCallbacks('CloudCreativity...', Object(CloudCreativity\LaravelJsonApi\Http\Requests\UpdateResource))
#9 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Container/Container.php(677): Illuminate\Container\Container->fireResolvingCallbacks('CloudCreativity...', Object(CloudCreativity\LaravelJsonApi\Http\Requests\UpdateResource))
#10 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Container/Container.php(609): Illuminate\Container\Container->resolve('CloudCreativity...', Array)
#11 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(759): Illuminate\Container\Container->make('CloudCreativity...', Array)
#12 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php(79): Illuminate\Foundation\Application->make('CloudCreativity...')
#13 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php(46): Illuminate\Routing\ControllerDispatcher->transformDependency(Object(ReflectionParameter), Array)
#14 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php(27): Illuminate\Routing\ControllerDispatcher->resolveMethodDependencies(Array, Object(ReflectionMethod))
#15 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(41): Illuminate\Routing\ControllerDispatcher->resolveClassMethodDependencies(Array, Object(CloudCreativity\LaravelJsonApi\Http\Controllers\JsonApiController), 'update')
#16 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(CloudCreativity\LaravelJsonApi\Http\Controllers\JsonApiController), 'update')
#17 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\Routing\Route->runController()
#18 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682): Illuminate\Routing\Route->run()
#19 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#20 /var/www/dev-local-server/vendor/cloudcreativity/laravel-json-api/src/Http/Middleware/NegotiateContent.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#21 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): CloudCreativity\LaravelJsonApi\Http\Middleware\NegotiateContent->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#23 /var/www/dev-local-server/vendor/cloudcreativity/laravel-json-api/src/Http/Middleware/Authorize.php(87): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#24 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): CloudCreativity\LaravelJsonApi\Http\Middleware\Authorize->handle(Object(Illuminate\Http\Request), Object(Closure), Object(App\JsonApi\DefaultAuthorizer))
#25 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#26 /var/www/dev-local-server/vendor/cloudcreativity/laravel-json-api/src/Http/Middleware/BootJsonApi.php(78): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#27 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): CloudCreativity\LaravelJsonApi\Http\Middleware\BootJsonApi->handle(Object(Illuminate\Http\Request), Object(Closure), 'default')
#28 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#29 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#30 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#32 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#33 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure), 'api')
#34 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#35 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(58): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#36 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure), 60, '1')
#37 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#38 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#39 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(684): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#40 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(659): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#41 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#42 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(614): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#43 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#44 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#45 /var/www/dev-local-server/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#46 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#47 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#48 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(31): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#49 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#50 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#51 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(31): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#52 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#53 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#54 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#55 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#56 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#57 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#58 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#59 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#60 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#61 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#62 /var/www/dev-local-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#63 /var/www/dev-local-server/public/index.php(55): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#64 {main}
"} `

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions