@@ -243,17 +243,10 @@ public function validateRequest(ServerRequestInterface &$request, string $path,
243
243
if ($ requestBody && $ requestMediaType = $ requestBody ->getContent ($ mediaType )) {
244
244
if (empty ($ requestBodyData ) && $ requestBody ->required ) {
245
245
$ errors [] = ['name ' => 'requestBody ' , 'code ' => 'error_required ' ];
246
- } else {
247
- switch ($ mediaType ) {
248
- case 'application/json ' :
249
- if (!empty ($ requestBodyData )) {
250
- $ errors = array_merge ($ errors , $ this ->validateObject ($ requestMediaType ->schema , $ requestBodyData ));
251
- }
252
- break ;
253
- case 'multipart/form-data ' :
254
- $ errors = array_merge ($ errors , $ this ->validateFormData ($ requestMediaType ->schema , $ requestMediaType ->encoding , $ request ));
255
- break ;
256
- }
246
+ } elseif ($ requestBodyData && $ this ->isJsonMediaType ($ mediaType )) {
247
+ $ errors = array_merge ($ errors , $ this ->validateObject ($ requestMediaType ->schema , $ requestBodyData ));
248
+ } elseif ('multipart/form-data ' === $ mediaType ) {
249
+ $ errors = array_merge ($ errors , $ this ->validateFormData ($ requestMediaType ->schema , $ requestMediaType ->encoding , $ request ));
257
250
}
258
251
}
259
252
return $ errors ;
@@ -523,4 +516,10 @@ private function getMediaType(MessageInterface $message) : ?string
523
516
$ contentTypeParts = preg_split ('/\s*[;,]\s*/ ' , $ header [0 ]);
524
517
return mb_strtolower ($ contentTypeParts [0 ]);
525
518
}
519
+
520
+ private function isJsonMediaType (string $ type ) : bool
521
+ {
522
+ // Allow JSON and JSON-formatted (eg: JSON-API) requests to be validated.
523
+ return 'application/json ' === $ type || false !== mb_strpos ($ type , '+json ' );
524
+ }
526
525
}
0 commit comments