【问题标题】:JMSSerializerBundle Show blank value instead of null valueJMSSerializerBundle 显示空值而不是空值
【发布时间】:2015-10-13 08:34:24
【问题描述】:

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

JSON 格式的 API 响应在适用的情况下返回“null”作为属性值,这会为移动开发人员使用的第 3 方库生成异常。

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

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

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

【问题讨论】:

    标签: json symfony fosrestbundle jmsserializerbundle


    【解决方案1】:

    您可以使用自定义访问者来做到这一点:

    <?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
    

    【讨论】:

      【解决方案2】:

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

      fos_rest:
          serializer:
              serialize_null: false
      

      如果您想要自定义值,可以使用serializer.post_serialize event

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

      php bin/console config:dump-reference fos_rest
      

      【讨论】:

      • 设置此 false 将从响应中完全删除 null 属性。但是我们需要用空白字符串显示那个键。
      • 感谢更新。我看到serializer.post_serialize 给了我ObjectEvent,它公开了完整的实体,我找不到哪个是对象(可为空)并且已为 API 序列化,需要设置为空白对象/字符串。我认为我们只能向ObjectEvent 添加新属性。
      • 我也有同样的问题。如何使用serializer.post_serialize 事件将空值替换为空字符串?没有关于如何使用 ObjectEvent 的文档。
      • 这个条目位于 app/config/config.yml 以防有人不知道。如果你没有那个条目,你可以在 fos_rest 正下方添加它,当然,如果你想显示它,可以传递一个 bool 给它。
      猜你喜欢
      • 2015-11-03
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 2012-03-03
      • 2018-04-26
      相关资源
      最近更新 更多