【发布时间】:2017-05-05 15:32:43
【问题描述】:
在 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());
}
我正在尝试使用
通过 curl 进行 POSTcurl -i -X POST http://127.0.0.1:8000/test -d '{"datum": "2016-12-20T09:01:41+0100", "name": "Alfons"}'
有效载荷如下所示: {"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.name 中有一个字符串,在 Test.datum 中有一个 DateTime 对象。
出于这个原因,我在上面的函数中输入了回调。然而,回调永远不会被调用。
我做错了什么?
问候
奥利弗
【问题讨论】:
-
我认为回调的主体可能是错误的。但是我注意到根本没有调用回调。