如何禁用对象属性的自动转换?
How to disable automatic casting of object properties?
我正在使用 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" 不是有效值,因为在我可以对对象进行任何验证之前它被强制转换为布尔值。
如果您需要进一步的解释,请告诉我,非常感谢您的帮助。
我找到了解决办法。
但是,我没有发现任何可能的捆绑包本身配置,但可以覆盖以下参数:
<parameter key="jms_serializer.json_deserialization_visitor.class">MyBundle\CoreBundle\Serializer\JsonDeserializationVisitor</parameter>
默认的 GenericDeserializationVisitor 使用 visitBoolean() 之类的方法,并将布尔类型转换为布尔值,这就是我的情况。
我正在使用 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" 不是有效值,因为在我可以对对象进行任何验证之前它被强制转换为布尔值。
如果您需要进一步的解释,请告诉我,非常感谢您的帮助。
我找到了解决办法。
但是,我没有发现任何可能的捆绑包本身配置,但可以覆盖以下参数:
<parameter key="jms_serializer.json_deserialization_visitor.class">MyBundle\CoreBundle\Serializer\JsonDeserializationVisitor</parameter>
默认的 GenericDeserializationVisitor 使用 visitBoolean() 之类的方法,并将布尔类型转换为布尔值,这就是我的情况。