我们正在使用Symfony2 FOSRestBundle和JMSSerializerBundle来开发移动开发人员使用的REST API。
JSON格式的API响应返回' null'作为适用的属性值,这将为移动开发人员使用的第三方库生成例外。
我没有看到JMSSerializerBundle或FOSRestBundle的解决方案根据我们的要求覆盖该值。
到目前为止的解决方法 我可以在实体中设置默认值,以便新数据在数据库中具有一些默认值,而不是null。但这对于一对一/多对一关系对象不起作用,因为默认情况下它们将返回null而不是空白对象。
序列化后覆盖json的任何解决方案?
答案 0 :(得分:6)
您可以使用自定义访问者执行此操作:
<?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 '';
}
}
然后,使用setSerializationVisitor
方法或配置文件将其设置为序列化程序:
# app/config/config.yml
parameters:
jms_serializer.json_serialization_visitor.class: Project\Namespace\Serializer\BlankSerializationVisitor
答案 1 :(得分:5)
使用FOSRestBundle时,在配置文件中(通常为app/config/config.yml
),您可以使用此设置来避免使用空值:
fos_rest:
serializer:
serialize_null: false
如果您想要自定义值,可以使用serializer.post_serialize
event。
PS:要获得捆绑包提供的所有可能选项,请键入以下命令:
php bin/console config:dump-reference fos_rest