【问题标题】:What method is being used during JMS serialization?JMS 序列化过程中使用什么方法?
【发布时间】:2018-11-24 06:08:18
【问题描述】:

我正在修改一个使用 Symfony 2.7 和 JMS Serializer 的 API。我有一个包含一些图像数据的实体。在我的实体定义中,相关字段注释如下:

/**
 * @var string
 *
 * @ORM\Column(name="images_data", type="text")
 * @JMS\Groups({"default", "playlist", "digital_signage", "distributed_item"})
 * @JMS\Type("array")
 * @JMS\Accessor(getter="getImagesDataDecode")
 * @JMS\SerializedName("imagesData")
 */
private $imagesData;

...我已将 getImagesDataDecode() 方法更改为如下所示:

public function getImagesDataDecode()
{
    return ['testone'=>'a','testtwo'=>'b'];
}

...但是在测试期间,我的 API 端点没有返回新的测试数组。我只能得出结论,在 API 响应期间未使用 getImagesDataDecode() 方法。

如何找出返回 API 数据的方法?

我希望在返回有问题的数据之前让我的程序做一些分析和过滤。没有地方插入该逻辑,看来我暂时不走运。

【问题讨论】:

  • 您是否尝试过调试并跟踪发出呼叫的轨迹?并在 getImagesDataDecode() 方法上设置一个断点。
  • 感谢您的评论。我尝试在 getImagesDataDecode() 中放置一个断点,但没有调用该方法。这让我不确定如何进行。
  • 好吧,看起来该方法没有被调用。在你修改你的代码之前,它被调用了吗?

标签: php symfony jmsserializerbundle


【解决方案1】:

您缺少 @JMS\AccessType 注释来告诉序列化程序使用您的访问器方法。它默认为property,因此它不使用任何方法,它通过反射使用属性本身。

https://jmsyst.com/libs/serializer/master/reference/annotations#accesstype

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多