如何为swagger-php OpenApi添加accept application / json标头

Nik*_*sev 5 php laravel swagger-php openapi

我使用L5-Swagger 5.7。*软件包(Swagger-php的包装器),并尝试描述Laravel REST API。所以,我的代码是这样的:

/**
 * @OA\Post(path="/subscribers",
 *     @OA\RequestBody(
 *         @OA\MediaType(
 *            mediaType="application/json",
 *            @OA\Schema(
 *               type="object",
 *               @OA\Property(property="email", type="string")
 *            )
 *        )
 *    ),
 *   @OA\Response(response=201,description="Successful created"),
 *   @OA\Response(response=422, description="Error: Unprocessable Entity")
 * )
 */
public function publicStore(SaveSubscriber $request)
{
    $subscriber = Subscriber::create($request->all());
    return new SubscriberResource($subscriber);
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试通过swagger面板发送请求时,我得到了代码:

curl -X POST "https://examile.com/api/subscribers" -H "accept: */*" -H "Content-Type: application/json" -H "X-CSRF-TOKEN: " -d "{\"email\":\"bademail\"}"
Run Code Online (Sandbox Code Playgroud)

如您所见,accept不是application / json,并且Laravel不会将其识别为AJAX请求。因此,当我发送错误的数据并期望实际获得422错误时,我在“会话”中获得200错误代码。通过招摇面板的请求(XHR)也会被错误地处理,CURL代码只是为了清楚起见。

另外,我发现在以前的版本中使用了类似以下内容:

* @SWG\Post(
*     ...
*     consumes={"multipart/form-data"},
*     produces={"text/plain, application/json"},
*     ...)
Run Code Online (Sandbox Code Playgroud)

但是现在它已经过时了。

那么,如果验证失败,如何在没有重定向的情况下获取422代码?或者添加“ XMLHttpRequest”标头?最好的办法是在这里做什么?

Bob*_*ger 5

响应未指定模仿类型。

 @OA\Response(response=201, description="Successful created"),
Run Code Online (Sandbox Code Playgroud)

如果指定json响应,则swagger-ui将发送Accept: application/json标头。

PS。因为json很常见,所以swagger-php有一个@OA\JsonContent简写形式,因此适用于响应:

@OA\Response(response=201, description="Successful created", @OA\JsonContent()),
Run Code Online (Sandbox Code Playgroud)

和请求者:

@OA\RequestBody(
  @OA\JsonContent(
    type="object",
    @OA\Property(property="email", type="string")
  )
),
Run Code Online (Sandbox Code Playgroud)