在Symfony控制器中我有以下功能:
/**
*
* @Route("/test", name="post_test")
* @Method("POST")
*/
public function postTest(Request $request){
$normalizer = new GetSetMethodNormalizer();
$callback = function ($dateTime) {
return $dateTime instanceof DateTime ? $dateTime->format(DateTime::ISO8601) : '';
};
$normalizer->setCallbacks(array('datum' => $callback));
$encoder = new JsonEncoder();
$serializer = new Serializer(array($normalizer), array($encoder));
$test = $serializer->deserialize($request->getContent(),Test::class, 'json');
return new Response($test->getName().":".$test->getDatum());
}
我正在尝试通过卷曲
进行POSTcurl -i -X POST http://127.0.0.1:8000/test -d '{"datum": "2016-12-20T09:01:41+0100", "name": "Alfons"}'
Payload看起来像: {“name”:“John Doe”,“datum”:“2016-12-20T09:01:41 + 0100”}
JSON应该序列化的类是这样的:
class Test {
private $name;
private $datum;
public function getName(){
return $this->name;
}
public function setName($name){
$this->name = $name;
}
public function getDatum(){
return $this->datum;
}
public function setDatum($datum){
$this->datum = $datum;
}
}
我的JSON被反序列化,这很好。但是结果是Test.name和Test.datum中的两个字符串。我真正想要的是在Test.dname中有一个字符串,在Test.datum中有一个DateTime对象。
因此我在上面的函数中输入了回调。但是从不调用回调。
我做错了什么?
此致
奥利弗
答案 0 :(得分:1)
不幸的是,回调只在序列化过程中调用,而不是在反序列化过程中调用。请参阅仅在callbacks
方法中使用的source code:normalize()
。所以,你可以:
DateTime
对象。 GetSetMethodNormalizer
)。