Не знаю, имеет ли это значение, но на самом деле я использую расширение flask-restplus
.
Все мои другие обработчики ошибок фляги работают, как и ожидалось, но по какой-то причине при обработке marshmallow
ValidationError
ответом является только мое исходное тело запроса, а не сообщение об ошибке зефира. Я выполнил некоторую отладку и знаю, что вызывается обработчик ошибок и что атрибуты ValidationError
доступны (например, проверено, что error.messages
равно {'age': ['Missing data for required field.']}
).
Кто-нибудь испытал это раньше? Спасибо за чтение, и заранее спасибо за любую помощь!
Полезная нагрузка:
{"name": "Bob"}
Обработчик ошибок:
from marshmallow.exceptions import ValidationError
@api.errorhandler(ValidationError)
def marshmallow_error_handler(error):
# print(error.messages) results in expected {'age': ['Missing data for required field.']}
return error.messages, 400
Схема:
class SimpleSchema(Schema):
name = fields.String(required=True)
age = fields.String(required=True)
Простой путь к тестовому обработчику:
@api.route("/test")
class MarshmallowTest(Resource):
def post(self):
SimpleSchema().load(api.payload)
Ожидаемый ответ:
{'age': ['Missing data for required field.']}
Фактический ответ:
{"name": "Bob"}
Мне удалось обойти это, переопределив функцию handle_error
marshmallow.Schema
и вызвав пользовательское исключение, но мне все еще очень любопытно, что вызывает такое поведение!