json - Json 端点循环引用处理程序 HTTP 500 错误
问题描述
我目前正在为对象(票)制作一个 json 端点。
这是我的功能:
/**
* @Route("/json/tickets", name="json_tickets")
*/
public function jsonTickets()
{
$encoders = [new XmlEncoder(), new JsonEncoder()];
$normalizers = [new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);
$tickets = $this->getDoctrine()->getRepository(Ticket::class)->findAll();
$jsonObject = $serializer->serialize($tickets, 'json', [
'circular_reference_handler' => function ($object) {
return $object->getId();
}
]);
return new Response($jsonObject);
}
这是门票的实体
class Ticket
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="tickets")
*/
private $user;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="ticket_responsibility")
*/
private $responsible;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Company", inversedBy="tickets")
*/
private $company;
/**
* @ORM\Column(type="integer")
*/
private $priority;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @ORM\Column(type="string", length=255)
*/
private $status;
----------
此函数返回 HTTP 500 错误。在 dev.log 中,它获得了所有正确的值并且没有显示错误。
我搜索了 awnsers,但找不到任何适合此功能的 awnsers。
服务器返回错误的函数有什么问题?谢谢!
解决方案
我认为问题出在这一行:
$jsonObject = $serializer->serialize($tickets, 'json', [
'circular_reference_handler' => function ($object) {
return $object->getId();
}
]);
你确定你可以传递一个列表$tickets
而serialize()
不是单个对象$ticket
吗?
如果必须返回对象列表,请使用
return $this->json($data, $status = 200, $headers = [], $context = []);
编辑:
如果您需要处理循环引用,您可以创建一个CircularReferenceHandler.php
类并将其注册为序列化程序framework.yaml
推荐阅读
- mysql - 通讯链路故障,Spring Boot + MySql +Docker + Hibernate
- entity-framework-6 - 在包含 EF6 中加载引用属性的引用属性
- c# - 在函数调用中实例化对象的性能(解释?)
- maven - Maven - 如何使用两个镜像
- c# - 并行化 Selenium 测试并保证线程安全
- javascript - 如何在 JavaScript 中使用标签初始化字符串而不拆分它或在斜杠之前添加反斜杠
- wordpress - 预加载链接 - wordpress 和 flatsome
- testing - CodeceptJS 完成后关闭浏览器窗口
- php - 重定向后引荐来源网址消失
- c - 有没有办法使用一些静态代码分析器显示函数的所有可能的回溯?