我正在使用JMSSerializerBundle
和,FOSRestBundle
并且我正在尝试通过@ParamConverter
注释反序列化我的请求:
/**
* @View()
*
* @Route("/users/{username}/globaltoken", defaults={"_format" = "json"}, requirements={"user"="\w+"})
* @ParamConverter(
* "userBody", class="Belka\AuthBundle\Entity\User",
* converter="fos_rest.request_body"
* )
*/
public function postAction($username, User $userBody)
{
...
在User
实体@ExclusionPolicy("all")
集和一些属性@expose
天。当我进行序列化时,这是完美的。不幸的是,在将我的身体反序列化为一个User
对象时,未设置未暴露的属性。有没有一种干净的方法来解决这个问题?
回答自己:@ExclusionPolicy(“all”)
出于安全目的,这不是您想要的。该标签是为处理不应序列化的数据而生的,无论出于安全性原因有时它是否不应出现。这是静态的,这样就可以了。
我真正想要的是使用来管理显示或不显示(或考虑反序列化)的内容groups
。因此:
一个例子:
* 实体 *
class User implements EncoderAwareInterface
{
/**
* @ORM\Id
* @ORM\Column(type="string")
* @Assert\NotBlank(message = "user.username.not_blank")
* @ORM\GeneratedValue(strategy="NONE")
* @Serializer\Groups({"default"})
*/
private $username;
/**
* @ORM\Column(type="string", nullable=true)
* @Serializer\Groups("personal")
*/
private $password;
...
* 控制器 *
/**
* @ParamConverter(
* "userBody",
* class="Belka\AuthBundle\Entity\User",
* converter="fos_rest.request_body",
* options={"deserializationContext"={"groups"={"personal"}}}
* )
*/
public function postAction($username, User $userBody, $_format)
{
这样,只有密码会反序列化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句