Skip to content

Commit 4f68494

Browse files
committed
Issue #474: Throw BadException on MalformedRequestBodyException
Signed-off-by: alexmerlin <alex.merlin.1985@gmail.com>
1 parent ba6444b commit 4f68494

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

config/pipeline.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Api\App\Middleware\AuthorizationMiddleware;
88
use Api\App\Middleware\ContentNegotiationMiddleware;
99
use Api\App\Middleware\DeprecationMiddleware;
10+
use Api\App\Middleware\MalformedRequestBodyMiddleware;
1011
use Api\App\Middleware\ResourceProviderMiddleware;
1112
use Dot\ResponseHeader\Middleware\ResponseHeaderMiddleware;
1213
use Mezzio\Application;
@@ -28,6 +29,7 @@
2829
// - return ProblemDetails response
2930
$app->pipe(ProblemDetailsMiddleware::class);
3031

32+
$app->pipe(MalformedRequestBodyMiddleware::class);
3133
$app->pipe(BodyParamsMiddleware::class);
3234
$app->pipe(ServerUrlMiddleware::class);
3335
$app->pipe(CorsMiddleware::class);
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Api\App\Middleware;
6+
7+
use Api\App\Exception\BadRequestException;
8+
use Api\App\Exception\RuntimeException;
9+
use Mezzio\Helper\Exception\MalformedRequestBodyException;
10+
use Psr\Http\Message\ResponseInterface;
11+
use Psr\Http\Message\ServerRequestInterface;
12+
use Psr\Http\Server\MiddlewareInterface;
13+
use Psr\Http\Server\RequestHandlerInterface;
14+
15+
readonly class MalformedRequestBodyMiddleware implements MiddlewareInterface
16+
{
17+
/**
18+
* @throws BadRequestException
19+
* @throws RuntimeException
20+
*/
21+
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
22+
{
23+
try {
24+
return $handler->handle($request);
25+
} catch (MalformedRequestBodyException $exception) {
26+
throw BadRequestException::create(
27+
$exception->getMessage() ?: 'Error when parsing JSON request body: Syntax error'
28+
);
29+
}
30+
}
31+
}

0 commit comments

Comments
 (0)