我在Postman上发布我的api路径(在api.php中),当数据验证失败时,它会在200响应中返回错误:
以上回答是我尝试的时候:
{
$valid = validator($request->only('email', 'password'), [
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6',
]);
if ($valid->fails()) {
$jsonError=response()->json($valid->errors()->all(), 400);
return \Response::json($jsonError);
}
}
然而,当我尝试下面documentation中的那个时,它会将我返回到视图(laravel欢迎页面),例如return back()
$request->validate([
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6',
]);
我发布的数据是:
email: ''
password: ''
// also tried with and without header
Content-Type: application/json
答案 0 :(得分:4)
此代码存在问题。
$jsonError=response()->json($valid->errors()->all(), 400);
return \Response::json($jsonError);
$jsonError
已经是一个JSONResponse对象,然后你再次将它封装在一个JSONReponse对象中。
json
方法创建一个新的JSONResponse对象,这是底层代码。
public function json($data = [], $status = 200, array $headers = [], $options = 0)
{
return new JsonResponse($data, $status, $headers, $options);
}
所以,当你在这里传递$jsonError
时,它就是$data
参数。现在,$status
参数的默认值为200
,但根据您的代码 DID NOT 传递任何值:
return \Response::json($jsonError);
// ^-- yeah, no $status argument here!
所以你有200回应是正确的。
要解决您的问题,只需返回您创建的第一个JSONResponse对象。
return response()->json($valid->errors()->all(), 400);
如果您仍想坚持使用当前代码,请执行此操作。但这毫无意义。
$jsonError=response()->json($valid->errors()->all(), 400);
return \Response::json($jsonError, 400);
此外,response()->json()
与Response::json()
相同:)
答案 1 :(得分:0)
您是否具有Accept:application / json标头?
请在标题中添加接受:application / json 。