我正在使用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。
如果您需要进一步说明,请告诉我,我非常感谢您的帮助。
答案 0 :(得分:0)
我找到了解决方案。
但是,我没有找到捆绑包本身的任何配置可能性,但可以覆盖以下参数:
<parameter key="jms_serializer.json_deserialization_visitor.class">MyBundle\CoreBundle\Serializer\JsonDeserializationVisitor</parameter>
默认的GenericDeserializationVisitor使用了visitBoolean()这样的方法,并将boolean类型转换为boolean,这是我的情况。