Skip to content

Commit 30cf4f7

Browse files
committed
Change exception throwing in BodyParamsMiddleware
1 parent 9d1b42f commit 30cf4f7

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

src/Middleware/BodyParamsMiddleware.php

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,31 @@
44

55
namespace HttpSoft\Basis\Middleware;
66

7-
use JsonException;
7+
use HttpSoft\Basis\Exception\BadRequestHttpException;
88
use Psr\Http\Message\ResponseInterface;
99
use Psr\Http\Message\ServerRequestInterface;
1010
use Psr\Http\Server\MiddlewareInterface;
1111
use Psr\Http\Server\RequestHandlerInterface;
1212

1313
use function json_decode;
14+
use function json_last_error;
15+
use function json_last_error_msg;
1416
use function in_array;
1517
use function parse_str;
1618
use function preg_match;
19+
use function sprintf;
20+
21+
use const JSON_ERROR_NONE;
1722

1823
final class BodyParamsMiddleware implements MiddlewareInterface
1924
{
2025
/**
2126
* {@inheritDoc}
2227
*
23-
* @throws JsonException
28+
* @throws BadRequestHttpException
2429
* @link https://tools.ietf.org/html/rfc7231
25-
* @psalm-suppress MixedAssignment
2630
* @psalm-suppress MixedArgument
31+
* @psalm-suppress MixedAssignment
2732
*/
2833
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
2934
{
@@ -34,7 +39,14 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
3439
$contentType = $request->getHeaderLine('content-type');
3540

3641
if (preg_match('#^application/(|[\S]+\+)json($|[ ;])#', $contentType)) {
37-
$parsedBody = json_decode((string) $request->getBody(), true, 512, JSON_THROW_ON_ERROR);
42+
$parsedBody = json_decode((string) $request->getBody(), true);
43+
44+
if (JSON_ERROR_NONE !== json_last_error()) {
45+
throw new BadRequestHttpException(sprintf(
46+
'Error when parsing JSON request body: %s',
47+
json_last_error_msg()
48+
));
49+
}
3850
} elseif (preg_match('#^application/x-www-form-urlencoded($|[ ;])#', $contentType)) {
3951
parse_str((string) $request->getBody(), $parsedBody);
4052
}

tests/Middleware/BodyParamsMiddlewareTest.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
namespace HttpSoft\Tests\Basis\Middleware;
66

7+
use HttpSoft\Basis\Exception\BadRequestHttpException;
78
use HttpSoft\Basis\Middleware\BodyParamsMiddleware;
89
use HttpSoft\Message\Response;
910
use HttpSoft\Message\ServerRequest;
10-
use JsonException;
1111
use PHPUnit\Framework\TestCase;
1212
use Psr\Http\Message\ResponseInterface;
1313
use Psr\Http\Message\ServerRequestInterface;
@@ -101,7 +101,7 @@ public function matchDataProvider(): array
101101
* @param string $contentType
102102
* @param string $requestBody
103103
* @param string $expectedBody
104-
* @throws JsonException
104+
* @throws BadRequestHttpException
105105
*/
106106
public function testProcessWithMatchData(string $contentType, string $requestBody, string $expectedBody)
107107
{
@@ -156,7 +156,7 @@ public function mismatchDataProvider(): array
156156
* @dataProvider mismatchDataProvider
157157
* @param string $contentType
158158
* @param string $requestBody
159-
* @throws JsonException
159+
* @throws BadRequestHttpException
160160
*/
161161
public function testProcessWithMismatchData(string $contentType, string $requestBody)
162162
{
@@ -166,11 +166,11 @@ public function testProcessWithMismatchData(string $contentType, string $request
166166
$this->assertSame('', (string) $response->getBody());
167167
}
168168

169-
public function testProcessThrowJsonExceptionForInvalidJsonBody(): void
169+
public function testProcessThrowBadRequestHttpExceptionForInvalidJsonBody(): void
170170
{
171171
$request = $this->createServerRequest('POST', 'application/json');
172172
$request->getBody()->write('{"name"}/value');
173-
$this->expectException(JsonException::class);
173+
$this->expectException(BadRequestHttpException::class);
174174
$this->middleware->process($request, $this->createRequestHandler());
175175
}
176176

0 commit comments

Comments
 (0)