JMSSerializerBundle显示空值而不是空值

时间:2015-07-23 07:15:01

标签: json symfony fosrestbundle jmsserializerbundle

我们正在使用Symfony2 FOSRestBundleJMSSerializerBundle来开发移动开发人员使用的REST API。

JSON格式的API响应返回' null'作为适用的属性值,这将为移动开发人员使用的第三方库生成例外。

我没有看到JMSSerializerBundle或FOSRestBundle的解决方案根据我们的要求覆盖该值。

到目前为止的解决方法 我可以在实体中设置默认值,以便新数据在数据库中具有一些默认值,而不是null。但这对于一对一/多对一关系对象不起作用,因为默认情况下它们将返回null而不是空白对象。

序列化后覆盖json的任何解决方案?

2 个答案:

答案 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