fix : 오류 발생시 json으로 값 전달 및 Swagger 문서 수정

This commit is contained in:
2025-07-26 15:22:09 +09:00
parent 02580926b7
commit c44bca1466
3 changed files with 83 additions and 8 deletions

View File

@@ -2,7 +2,14 @@
namespace App\Exceptions;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Throwable;
use Illuminate\Support\Facades\Http;
@@ -37,4 +44,79 @@ protected function sendSlackException(Throwable $e): void
logger()->error('슬랙 전송 실패', ['message' => $ex->getMessage()]);
}
}
public function render($request, Throwable $exception)
{
if ($request->expectsJson()) {
// 400 Bad Request (예: ValidationException)
if (
$exception instanceof ValidationException ||
$exception instanceof BadRequestHttpException
) {
return response()->json([
'success' => false,
'message' => '필수 파라미터 누락',
'data' => null,
], 400);
}
// 401 Unauthorized
if ($exception instanceof AuthenticationException) {
return response()->json([
'success' => false,
'message' => '인증 실패',
'data' => null,
], 401);
}
// 403 Forbidden
if ($exception instanceof AccessDeniedHttpException) {
return response()->json([
'success' => false,
'message' => '권한 없음',
'data' => null,
], 403);
}
// 404 Not Found
if ($exception instanceof NotFoundHttpException) {
return response()->json([
'success' => false,
'message' => '존재하지 않는 URI 또는 데이터',
'data' => null,
], 404);
}
// 405 Method Not Allowed
if ($exception instanceof MethodNotAllowedHttpException) {
return response()->json([
'success' => false,
'message' => '허용되지 않는 메서드',
'data' => null,
], 405);
}
// 500 Internal Server Error (기타 모든 에러)
if (
$exception instanceof HttpException &&
$exception->getStatusCode() === 500
) {
return response()->json([
'success' => false,
'message' => '서버 에러',
'data' => null,
], 500);
}
// 그 외 모든 예외
return response()->json([
'success' => false,
'message' => '서버 에러',
'data' => null,
], 500);
}
return parent::render($request, $exception);
}
}