in einem Symfony-Controller erwartete ich die folgende Funktion haben:Symfony3 Deserialisierung von JSON nicht wie
/**
*
* @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());
}
Ich versuche, die POST über curl mit
curl -i -X POST http://127.0.0.1:8000/test -d '{"datum": "2016-12-20T09:01:41+0100", "name": "Alfons"}'
Payload sieht aus wie zu tun: { "name": "John Doe", "Datum": "2016-12-20T09: 01: 41 + 0100"}
die Klasse, zu der die JSON serialisiert werden soll wie folgt lautet:
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;
}
}
Meine JSON werden deserialisiert, was in Ordnung ist. Das Ergebnis sind jedoch zwei Zeichenfolgen in Test.name und Test.datum. Was ich eigentlich will, ist eine Zeichenfolge in Test.name und ein DateTime-Objekt in Test.datum.
Aus diesem Grund habe ich den Callback in der obigen Funktion eingetragen. Der Rückruf wird jedoch nie aufgerufen.
Was mache ich falsch?
Grüße
Oliver
Ich nehme an, dass der Körper des Rückrufs falsch sein könnte. Aber ich habe bemerkt, dass der Rückruf überhaupt nicht aufgerufen wird. –