Error Handling

Sungju Kim·2024년 9월 26일

Sparta_Coding_Camp_TIL

목록 보기
41/53

In our tazza-of-delivery group project, we use a Global Exception Handler and Error Code Enumerations

Global Exception Handler

package com.sparta.tazzaofdelivery.domain.exception;

[imports...]

@RestControllerAdvice
public class GlobalExceptionHandler {
    
    @ExceptionHandler(TazzaException.class)
    public ResponseEntity<Map<String, Object>> handlePasswordMismatchException(TazzaException ex) {
        return getErrorResponse(ex.getErrorCode().getStatus(), ex.getMessage());
    }


    public ResponseEntity<Map<String, Object>> getErrorResponse(HttpStatus status, String message) {
        Map<String, Object> errorResponse = new HashMap<>();
        errorResponse.put("status", status.name());
        errorResponse.put("code", status.value());
        errorResponse.put("message", message);

        return new ResponseEntity<>(errorResponse, status);
    }
}

Error Code Enumerations

NOTE: In Enumerations, fields and contructors com after the enum constants.

package com.sparta.tazzaofdelivery.domain.exception;

import lombok.Getter;
import org.springframework.http.HttpStatus;

@Getter
public enum ErrorCode {

    // User ErrorCode
    USER_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 유저 입니다."),
    USER_ID_DUPLICATION(HttpStatus.BAD_REQUEST, "중복되는 아이디 입니다."),
    USER_PW_ERROR(HttpStatus.BAD_REQUEST, "비밀 번호가 아이디와 일치하지 않습니다."),
    USER_SAME_PW_ERROR(HttpStatus.NOT_FOUND, "현재와 동일한 비밀번호로 변경할 수 없습니다"),


    // Menu ErrorCode
    MENU_CREATE_UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "메뉴 등록 및 수정은 가게 사장님만 가능합니다."),
    MENU_NOT_FOUND(HttpStatus.NOT_FOUND, "등록되지 않은 메뉴입니다."),
    MENU_INVALID_PRICE(HttpStatus.BAD_REQUEST, "가격은 0이상의 양수만 입력가능합니다."),
    MENU_ISDELETED(HttpStatus.BAD_REQUEST, "삭제된 메뉴입니다."),


    // Order ErrorCode
    ORDER_STATUS_CODE_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 주문 상태 코드 입니다."),
    ORDER_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 주문 입니다."),
    ORDER_USER_NOT_EQUAL(HttpStatus.NOT_FOUND, "해당 사용자의 주문이 아닙니다."),
    USER_ORDER_NOT_EXIST(HttpStatus.NOT_FOUND, "사용자의 주문내역이 없습니다."),
    OWNER_ORDER_NOT_EXIST(HttpStatus.NOT_FOUND,"들어온 주문내역이 없습니다."),
    ORDER_FORBIDDEN(HttpStatus.FORBIDDEN, "총 주문금액이 최소주문 금액보다 적습니다."),
    ORDER_STATUS_FORBIDDEN(HttpStatus.FORBIDDEN, "현재 배달 Status 가 맞지 않습니다."),
    NOT_OWNER(HttpStatus.UNAUTHORIZED, "OWNER 권한이 없습니다."),


    // Cart ErrorCode
    CART_STATUS_CODE_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 장바구니 상태 코드 입니다."),
    CART_USER_NOT_EXIST(HttpStatus.NOT_FOUND, "해당 유저의 장바구니가 좋재하지 않습니다."),
    CART_NOT_FOUND(HttpStatus.NOT_FOUND,"해당 장바구니는 존재하지 않습니다."),
    CART_USER_NOT_EQUAL(HttpStatus.NOT_FOUND,"해당 사용자의 장바구니가 아닙니다."),
    CART_EXIST(HttpStatus.NOT_ACCEPTABLE, "이용중인 장바구니가 존재합니다."),

    // Store Errorcode
    STORE_FORBIDDEN(HttpStatus.FORBIDDEN,"사장님 권한을 가진 사용자만 가게를 생성할 수 있습니다."),
    STORE_BAD_REQUEST(HttpStatus.BAD_REQUEST,"사장님은 최대 3개의 가게까지만 운영할 수 있습니다."),
    STORE_NOT_FOUND(HttpStatus.NOT_FOUND,"해당 가게를 찾을 수 없습니다."),
    STORE_DELETE_FORBIDDEN(HttpStatus.FORBIDDEN,"해당 가게의 소유자가 아닙니다."),
    STORE_NOT_OPEN(HttpStatus.BAD_REQUEST, "가게 영업 시간이 아닙니다."),


    // Favorite ErrorCode
    ALREADY_FAVORITE(HttpStatus.BAD_REQUEST,"이미 즐겨찾기한 가게입니다." ),
    FAVORITE_NOT_FOUND(HttpStatus.NOT_FOUND, "즐겨찾기한 가게를 찾을 수 없습니다." ),

    // search ErroCode
    KEYWORD_NOT_FOUND(HttpStatus.NOT_FOUND, "검색한 키워드가 없습니다."),

    // 아래 코드 위에 ErrorCode 작성해 주세요!
    NOT_FOUND(HttpStatus.NOT_FOUND, "찾지못했습니다.");


    private final HttpStatus status;
    private final String message;

    ErrorCode(HttpStatus httpStatus, String message){
        this.status = httpStatus;
        this.message = message;
    }
}

TazzaException.java

package com.sparta.tazzaofdelivery.domain.exception;

import lombok.Getter;

@Getter
public class TazzaException extends RuntimeException {
    //  run time exceptions are only detected during the execution of your app
    private ErrorCode errorCode;

    public TazzaException(ErrorCode errorCode) {
        super(errorCode.getMessage());
        this.errorCode = errorCode;
    }
}
profile
Fully ✨committed✨ developer, always eager to learn!

0개의 댓글