Skip to content

Commit 7d97d29

Browse files
authored
Merge pull request #1128 from python-openapi/fix/request-body-validation-error-detail
Include root cause in request body validation errors
2 parents 072f50c + fb87de3 commit 7d97d29

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

openapi_core/validation/request/exceptions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class RequestValidationError(ValidationError):
2121

2222
class RequestBodyValidationError(RequestValidationError):
2323
def __str__(self) -> str:
24+
if self.__cause__ is not None:
25+
return f"Request body validation error: {self.__cause__}"
2426
return "Request body validation error"
2527

2628

tests/integration/validation/test_strict_json_validation.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,31 @@ def test_request_validator_urlencoded_json_part_strict() -> None:
167167
validator.validate(request)
168168

169169

170+
def test_request_validator_error_message_includes_cause_details() -> None:
171+
spec = _spec_schema_path()
172+
validator = V30RequestValidator(spec)
173+
174+
request_json = {
175+
"id": "123e4567-e89b-12d3-a456-426614174000",
176+
"username": "Test User",
177+
"age": "30",
178+
}
179+
request = MockRequest(
180+
"http://example.com",
181+
"post",
182+
"/users",
183+
content_type="application/json",
184+
data=json.dumps(request_json).encode("utf-8"),
185+
)
186+
187+
with pytest.raises(InvalidRequestBody) as exc_info:
188+
validator.validate(request)
189+
190+
error_message = str(exc_info.value)
191+
assert error_message.startswith("Request body validation error:")
192+
assert "'30' is not of type 'integer'" in error_message
193+
194+
170195
def test_response_validator_strict_json_nested_types() -> None:
171196
"""Test that nested JSON structures (arrays, objects) remain strict."""
172197
spec_dict = {

0 commit comments

Comments
 (0)