From 2db23d3328c9a83895ffdf5e5d0e0341624c6c03 Mon Sep 17 00:00:00 2001 From: Vincent Maillol Date: Tue, 3 Nov 2020 13:10:44 +0100 Subject: [PATCH] PydanticView returns 400 if the request payload is not JSON --- aiohttp_pydantic/injectors.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/aiohttp_pydantic/injectors.py b/aiohttp_pydantic/injectors.py index a653fd1..74e7eb9 100644 --- a/aiohttp_pydantic/injectors.py +++ b/aiohttp_pydantic/injectors.py @@ -1,7 +1,9 @@ import abc from inspect import signature +from json.decoder import JSONDecodeError from typing import Callable, Tuple +from aiohttp.web_exceptions import HTTPBadRequest from aiohttp.web_request import BaseRequest from pydantic import BaseModel @@ -47,7 +49,13 @@ class BodyGetter(AbstractInjector): self.arg_name, self.model = next(iter(args_spec.items())) async def inject(self, request: BaseRequest, args_view: list, kwargs_view: dict): - body = await request.json() + try: + body = await request.json() + except JSONDecodeError: + raise HTTPBadRequest( + text='{"error": "Malformed JSON"}', content_type="application/json" + ) + kwargs_view[self.arg_name] = self.model(**body)