Symfony4中FOSRestBundle返回204无内容响应问题求助
解决REST接口返回204无内容的问题
让我一步步帮你排查这个问题,你现在遇到的204无内容和跳转问题,主要有几个关键点需要修正:
1. 你的getAction方法是空的!
这是最直接的原因——控制器方法没有返回任何数据,Symfony自然会返回204 No Content响应。你需要在方法里从数据库获取对应的Movie实体并返回它。修改你的MovieController.php:
<?php namespace App\Controller; use FOS\RestBundle\Controller\Annotations as Rest; use FOS\RestBundle\Routing\ClassResourceInterface; use FOS\RestBundle\Controller\FOSRestController; use App\Entity\Movie; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * @Rest\RouteResource("Movie", pluralize=false) */ class MovieController extends FOSRestController implements ClassResourceInterface { private $em; // 注入EntityManagerInterface,用于查询数据库 public function __construct(EntityManagerInterface $em) { $this->em = $em; } /** * @Rest\View() */ public function getAction(string $id) { // 根据ID从数据库获取Movie实体 $movie = $this->em->getRepository(Movie::class)->find($id); // 如果找不到对应的Movie,返回404 if (!$movie) { throw new NotFoundHttpException('Movie not found'); } // 返回Movie实体,FOSRest会自动序列化为JSON return $movie; } }
2. 调整FOSRestBundle配置,避免模板渲染冲突
之前你遇到的EngineInterface注入错误,是因为framework.yaml里启用了templating,但FOSRestBundle默认会尝试渲染模板而非直接返回JSON。更新packages/fos_rest.yaml,明确强制返回JSON并禁用模板相关逻辑:
fos_rest: param_fetcher_listener: true allowed_methods_listener: true routing_loader: include_format: false view: view_response_listener: 'force' # 禁用模板渲染,强制使用JSON序列化 templating_formats: json: false force_redirects: html: false formats: json: true format_listener: rules: - { path: '^/api', priorities: ['json'], fallback_format: 'json', prefer_extension: false } zone: - { path: ^/api/* }
如果你的项目只做API服务,可以直接在packages/framework.yaml里移除templating配置:
framework: # 移除这一行:templating: { engines: ['twig'] } # 其他原有配置保持不变
3. 简化路由注解,避免冗余
从路由调试结果看,get_movie路由是正常的,但你同时使用了@Rest\RouteResource和@Rest\Get注解,属于冗余配置。@Rest\RouteResource已经会自动生成标准REST路由(包括GET /api/movie/{id}),所以可以去掉@Rest\Get("/movie/{id}")注解,让注解更简洁规范。
4. 测试修正后的接口
重启Symfony服务器后,访问localhost:8000/api/movie/3,应该会返回id为3的Movie实体的JSON数据,不再出现204无内容或跳转问题。之前遇到的JSON.parse错误,本质是返回内容非有效JSON,修正后也会自动消失。
内容的提问来源于stack exchange,提问作者rmsluimers
相关产品推荐
相关产品推荐

