You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 5调用setStatusCode()设置201后返回200且响应头混入正文问题

问题根源

你的代码存在响应对象嵌套的错误:JsonResponse本身已经是Symfony响应类的子类,可以直接作为控制器返回值,你额外套了一层Response,触发了两个问题:

  1. 外层新生成的Response默认状态码为200,覆盖了你内层设置的201状态码
  2. Response构造方法的第一个参数要求传入字符串类型的响应体,你传入JsonResponse对象时,PHP会自动将该对象转为包含完整头信息、状态码、响应体的字符串,全部塞进外层响应的body中,因此你会看到头信息混入响应体的异常表现。

修复方案

直接返回你配置好的JsonResponse即可,不需要额外套Response:

// RETURN MESSAGE
$body = [
    'auth_token' => $jwt,
];
// 构造方法直接传状态码更简洁,也可以用你原来的setStatusCode写法
$json = new JsonResponse($body, 201);
// 推荐使用Symfony内置常量代替硬编码状态码,可读性更强:
// $json = new JsonResponse($body, Response::HTTP_CREATED);
return $json;

如果你需要使用原生Response实现同等效果,写法如下:

$body = [
    'auth_token' => $jwt,
];
return new Response(
    json_encode($body),
    201,
    ['Content-Type' => 'application/json']
);

内容的提问来源于stack exchange,提问作者FourBars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:06:03