I have the following custom exception handler in Django REST framework.
class ErrorMessage:
def __init__(self, message):
self.message = message
def insta_exception_handler(exc, context):
response = {}
if isinstance(exc, ValidationError):
response['success'] = False
response['data'] = ErrorMessage("Validation error")
return Response(response)
I want a JSON output as shown below
"success":false,
"data":{ "message" : "Validation error" }
But I get the error TypeError: Object of type 'ErrorMessage' is not JSON serializable
. Why is a class as simple as ErrorMessage
above not JSON serializable? How can I solve this problem?
It is not serializable because it is an object
, it should be dict
, list
or plain value. But you can easily fix your problem by using magic property __dict__
def insta_exception_handler(exc, context):
response = {}
if isinstance(exc, ValidationError):
response['success'] = False
# like this
response['data'] = ErrorMessage("Validation error").__dict__
return Response(response)
I think more generic way would be to create a serializer for serializing the error message object:
from rest_framework import serializers
class ErrorMessageSerializer(serializers.Serializer):
message = serializers.CharField(max_length=256)
Then you can do:
def insta_exception_handler(exc, context):
...
serializer = ErrorMessageSerializer(ErrorMessage("Validation error"))
response["data"] = serializer.data
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With