【问题标题】:How to show null value in JSON in FOS Rest Bundle with JMS Serializer?如何使用 JMS 序列化器在 FOS Rest Bundle 中的 JSON 中显示空值?
【发布时间】:2013-05-23 00:11:27
【问题描述】:

我阅读了这个:https://github.com/schmittjoh/serializer/issues/77,但没有找到任何方法来序列化 JSON 中的空值,用于带有 JMS 序列化程序的 FOS Rest 捆绑包(意味着即使它为空,也只显示 Doctrine 对象的键)。

我在 composer.json 中使用以下配置

"jms/serializer-bundle": "0.12.*@dev",
"friendsofsymfony/rest-bundle": "0.13.*@dev",

JMS 序列化程序配置

#jms-serializer
jms_serializer:
 visitors:
    json:
        options: 0 # json_encode options bitmask
        serialize_null: true

或 FOS Rest bunde 配置

fos_rest:
view:
    serialize_null: true

不起作用。我没有使用视图,我是“view_response_listener:'force'”,所以如果可以提供配置中的解决方案,它会有所帮助,谢谢。

【问题讨论】:

  • 我也从来没有想过,我认为这不可能。

标签: php symfony fosrestbundle jmsserializerbundle


【解决方案1】:

让这个功能像魅力一样发挥作用的最简单方法

将以下额外配置添加到您的 fos_rest 配置选项:

fos_rest:
    serializer:
        serialize_null: true

【讨论】:

    【解决方案2】:

    您最近可以在配置中设置以下选项:

    fos_rest:
        serializer:
            serialize_null: true
    

    【讨论】:

    • 最近的意思是dev-master,不稳定(0.12.0)
    【解决方案3】:

    试试这个

    在你的控制器中

        $entity = $this->getEntity($id);
    
        $context = new SerializationContext();
        $context->setSerializeNull(true);
    
        $serializer = $this->get('jms_serializer');
    
        $response = new Response($serializer->serialize($entity, 'json', $context));
        $response->headers->set('Content-Type', 'application/json');
    
        return $response;
    

    但是我不知道与 fosrestbundle 关于配置的交互。

    【讨论】:

    • 我应该在哪里做这个控制器是从 symfony 控制器扩展而来的,我什至没有使用视图我只是返回一个对象。
    • 很抱歉投反对票,因为答案确实有效。但是控制器不是编写这种逻辑的合适位置。此逻辑应在所有项目中保持一致,因此位于全局配置文件中。
    • @stwe 是否可以将其添加为“钩子”?我已经有很多控制器,并且希望默认“启用”它。遗憾的是我没有使用 fos_rest,而且似乎 symfony 或 jms 本身没有配置选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2016-05-12
    • 2018-10-27
    • 2023-03-21
    相关资源
    最近更新 更多