Django Rest Framework Response is not JSON serializable error
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 need JSON output as shown below
"success":false,
"data":{ "message" : "Validation error" }
But I am getting error TypeError: Object of type 'ErrorMessage' is not JSON serializable
. Why is the class as simple as ErrorMessage
above and not JSON serializable? How can I solve this problem?
source to share
It is not serializable because it is object
, it should be dict
, list
or a simple value. But you can easily fix your problem using the 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)
source to share
I think a more general way would be to create a serializer to serialize 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
...
source to share