We are using Symfony2 FOSRestBundle with JMSSerializerBundle for developing REST APIs to be consumed by mobile developers.
The API response in JSON format returns 'null' as value of properties wherever applicable, which is generating an exception for the 3rd party library being used by mobile developers.
I don't see a solution from JMSSerializerBundle or FOSRestBundle to overwrite the value as per our requirement.
Workaround so far I can set default value in entity so that the fresh data will have some default value in database, instead of null. But this doesn't work for a one-to-one/many-to-one relationship objects, as those will return null by default instead of blank object.
Any solution to overwrite the json after serialization ?
You can use a custom visitor to do that:
<?php
namespace Project\Namespace\Serializer;
use JMS\Serializer\Context;
use JMS\Serializer\JsonSerializationVisitor;
class BlankSerializationVisitor extends JsonSerializationVisitor
{
/**
* {@inheritdoc}
*/
public function visitNull($data, array $type, Context $context)
{
return '';
}
}
And then, set it to your serializer with the setSerializationVisitor
method or in your config file:
# app/config/config.yml
parameters:
jms_serializer.json_serialization_visitor.class: Project\Namespace\Serializer\BlankSerializationVisitor
When using the FOSRestBundle, in your configuration file (generally app/config/config.yml
) you can use this settings to avoid having null values:
fos_rest:
serializer:
serialize_null: false
If you want a custom value, you can use the serializer.post_serialize
event.
PS: To have all possible options provided by the bundle, type this command:
php bin/console config:dump-reference fos_rest
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