JSON 中的 setStatusCode() 在 body 中返回 headers

setStatusCode() in a JSON is returning headers inside the body

我正在使用 PHP 和 Symfony 5 开发 API。

在身份验证方法中,我需要return一个JWT Token,并且header的代码是201 Created,所以我使用了这个代码:

// RETURN MESSAGE
$body = [
    'auth_token' => $jwt,
];
$json = new JsonResponse($body);
$json->setStatusCode(201, "Created");
return new Response($json);

其中 $jwt 是之前生成的。

有了这个,我期望得到一个 header 和 201 Created 代码,以及一个 body 和 JWT 令牌,但我得到的(使用 Postman)是这个:

如您所见,所有内容都在 body 中,而 header 实际代码是 200 Ok。我错过了什么吗?

您应该 return正在 JsonResponse

但出于某种原因,您将 JsonResponse 包裹在另一个 Response object.

就这样:

$body = [
        'auth_token' => $jwt,
];

$json = new JsonResponse($body);
$json->setStatusCode(201, "Created");

return $json;

我假设您打电话给 setStatusCode() 是因为您想将某种类型的自定义文本设置为响应 header。但是如果你设置默认的“已创建”,你可以在实例化 JsonResponse object:

时简单地设置状态码
return new JsonResponse($payload, Response::HTTP_CREATED);

A JsonResponse object 已经扩展了 Response,它只是一种使用 application/json Content-Type headers 创建响应的简单方法,并自动编码为 JSON 您想要 return.

的任何有效载荷

同@yivi answer 但你可以直接在构造函数上设置状态码

$body = [
    'auth_token' => $jwt,
];

return new JsonResponse($body, Response::HTTP_CREATED);