【问题标题】:How to disable automatic casting of object properties?如何禁用对象属性的自动转换?
【发布时间】:2015-08-17 19:45:51
【问题描述】:

我正在使用 JMS 序列化程序包在 restful api 中序列化和反序列化数据。我有以下情况:

实体:

/**
 * Settings
 *
 * @ORM\Table(name="user_settings")
 * @ORM\Entity
 *
 * @JMS\ExclusionPolicy("none")
 * @JMS\AccessType("public_method")
 */
class Settings
{
    /**
     * @var boolean
     *
     * @ORM\Column(name="search", type="boolean")
     *
     * @JMS\Groups({"get", "update"})
     */
    private $search;
}

我已将 JMS 配置为使用 Doctrine 对象构造函数。

当我进行 POST 并将数据反序列化到 Settings 对象时,它可以工作,但在这样的场景中:

{"id":5, "search":"string"}

它会自动将字符串“string”转换为布尔值。我相信这与教义有关。如果我将 ORM 列注释修改为 type="string",则不会发生强制转换,这是我想要的,但我想保留 type="boolean"。

在当前情况下,我无法验证对象并说“字符串”不是有效值,因为在我可以对对象进行任何验证之前,它被转换为布尔值。

如果您需要进一步的解释,请告诉我,非常感谢您的帮助。

【问题讨论】:

    标签: symfony doctrine-orm jmsserializerbundle


    【解决方案1】:

    我已经找到了解决方案。

    但是,我没有发现捆绑包本身的任何配置可能性,但可以覆盖以下参数:

    <parameter key="jms_serializer.json_deserialization_visitor.class">MyBundle\CoreBundle\Serializer\JsonDeserializationVisitor</parameter>
    

    默认的 GenericDeserializationVisitor 使用诸如 visitBoolean() 之类的方法,并将布尔类型转换为布尔值,这就是我的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 2014-11-12
      • 2020-11-25
      相关资源
      最近更新 更多