如何禁用对象属性的自动转换?

时间:2015-08-17 19:45:52

标签: symfony doctrine-orm jmsserializerbundle

我正在使用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”。

根据目前的情况,我无法验证对象并说“string”不是有效值,因为在我对对象进行任何验证之前它会被转换为boolean。

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

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

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

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

默认的GenericDeserializationVisitor使用了visitBoolean()这样的方法,并将boolean类型转换为boolean,这是我的情况。