JMSSerializerBundle显示空值而不是空值

Jee*_*eet 6 json symfony fosrestbundle jmsserializerbundle

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

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

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

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

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

Seb*_*300 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 '';
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,使用setSerializationVisitor方法或配置文件将其设置为序列化程序:

# app/config/config.yml
parameters:
    jms_serializer.json_serialization_visitor.class: Project\Namespace\Serializer\BlankSerializationVisitor
Run Code Online (Sandbox Code Playgroud)


COi*_*Oil 5

使用FOSRestBundle时,在配置文件中(通常app/config/config.yml)可以使用此设置来避免使用空值:

fos_rest:
    serializer:
        serialize_null: false
Run Code Online (Sandbox Code Playgroud)

如果需要自定义值,可以使用该serializer.post_serialize 事件.

PS:要获得捆绑包提供的所有可能选项,请键入以下命令:

php bin/console config:dump-reference fos_rest
Run Code Online (Sandbox Code Playgroud)