🐳
Engineering Wiki
  • 🖐️Welcome
  • 📚백엔드 로드맵
    • 메인페이지
  • Spring
    • spring boot
      • security
        • security 기본
        • filter
        • JWT
      • 스프링 핵심 원리
        • 객체지향 설계와 스프링
        • 스프링IoC컨테이너와 bean
      • IntelliJ
        • Spring boot 생성 및 git clone
        • Spring boot 프로젝트 생성
      • vscode
        • Spring boot 프로젝트 생성
      • scheduling
        • 스케쥴링 설정시 에러 상황
      • paging
      • 에러 핸들링
        • ErrorCode생성 및 ExceptionHandler로 에러처리
        • Security & JWT 에러처리
        • spring cloud sleuth
      • 로그 핸들링
        • logback
        • HttpRequestServlet 래핑
      • gradle
        • hidetake.ssh 키파일 설정
      • maven
        • maven tomcat
      • lib
        • lombok
        • tiles
      • API 부하테스트 툴 K6
      • JPA
        • Mybatis / JPA 차이
      • Mybatis
    • spring batch
      • batch
        • Spring Batch 기본개념
  • FRONT
    • vue
      • Spring boot & Vue.js 설치 및 연동
      • Spring boot & Vue.js 웹개발 세팅
      • vue의 기본구조 실행순서
      • SPA 이해
  • JAVA
    • 환경설정
    • 자바의 정석
      • generics
  • DATABASE
    • mongoDB
      • 정규표현식을 사용해 대소문자 구분없이 검색
      • mongoDB export import
      • MAC 설치 및 실행
    • MYSQL
      • dbeaver 데이터 내보내기 불러오기
      • [에러] 스프링 mysql 8 연결 에러
      • MAC M1 mysql 설치
      • GROUP BY 정리
      • 테이블 명세서 빠르게 생성
  • AWS
    • IAM
    • 설치&명령어
      • eb 설치 & 명령어
      • CLI 설치 & 명령어
    • sam
      • SAM 개념
      • SAM Lambda S3이벤트 트리거, MongoDB 접근코드
      • SAM intellij 배포
    • peering
      • mongodb atlas AWS vpc peering
      • MongoDB & Lambda VPC peering ,endpoint설정
    • 쉘스크립트
      • 도커 컨테이너 중단시 슬랙 리포팅 및 재실행
  • DOCKER
    • 설치&명령어
      • Docker 기초
      • Docker Container 유용한 명령어
    • MAC관련 문제
      • 이미지 빌드 관련 문제상황
      • MAC M1 도커 실행 원리
      • [에러] docker: Error response from daemon: Mounts denied:
  • ELK
    • 세팅
      • 로드벨런서에 logstash 세팅
      • Elastic Beanstalk + Elastic Cloud + docker 설정
      • ElasticCloud + filebeat + logstash + docker 설정 (버전8.5.0)
      • ELK 적용 사례, 로그수집(filebeat/logstash) 설명
    • logstash
      • Logstash는 로그를 왜 message라는 field로 저장할까?
      • logstash health check
    • filebeat
      • filebeat 아키텍쳐
  • unity
    • 유니티 기본
      • 캐릭터 이동
      • 카메라
  • WORDPRESS
    • 워드프레스 기본
  • git
    • GIT 개념
      • 라이프사이클
    • 명령어
      • defult 브랜치 main 으로 변경
      • 첫번째 커밋 삭제(브런치삭제) 후 원격저장소에 강제 push
      • git 원격저장소에 remote 방법(vscode로 진행)
      • git gh
      • git reset
      • git rebase
  • MAC
    • 개발 환경세팅
      • 맥 초기 개발세팅
    • 유용한내용
      • app store 다운로드 없이 웹에서 Xcode 다운
      • ubuntu iso 설치 usb 만들기
      • 응용프로그램 에러
      • 잠김 파일
  • CS
    • data structure & algorism
      • 자료구조의 정의 및 종류
  • 방통대
    • 대학수학의 이해
      • 1강. 수학의 기초(1)
    • 딥러닝
      • 1강.신경망의 개요
  • NODE
    • 개발기록
      • 인스타그램 API 활용하여 게시물 슬랙에 리포팅
Powered by GitBook
On this page
  1. Spring
  2. spring boot
  3. 에러 핸들링

ErrorCode생성 및 ExceptionHandler로 에러처리

Previous에러 핸들링NextSecurity & JWT 에러처리

Last updated 2 years ago

생성일: 2022년 10월 26일 오전 11:39

비즈니스 에러처리

  • 참조에 있는 깃허브 코드와 블로그 내용을 토대로 문서를 작성하고 개발함

  • 문서의 엑셀 링크는 엑세스 할 수 없으니 이미지를 첨부함 (예시)

  • ErrorCode enum 을 생성

    • 정의한 오류코드들을 enum 으로 구현

import lombok.Getter;

@Getter
public enum ErrorCode {

    ERROR_SUCCESS(200, "success")
    , ERROR_USER(401,"this email is already in use")
		....(생략)

    private final int code;
    private final String msg;

    ErrorCode(int code, String msg){
        this.code = code;
        this.msg = msg;
    }
}
  • RuntimeException 을 상속받는 클래스를 생성해준다

@Getter
public class ApiException extends RuntimeException {
    private final ErrorCode errorCode;
    
    ApiException(ErrorCode errorCode){
        this.errorCode = errorCode;
    }
}
  • RuntimeException

    • 실행중에 발생하는 에러이며 시스템환경적으로나 인풋값이 잘못된 경우나 프로그래머가 의도적으로 에러를 발생시킬 조건에 부합할 때 발생

  • @ExceptionHandler 어노테이션 활용한 ApiExceptionHandler 생성

    • value 값으로 어떤 exception을 줄지 정함

    • 내가 보내주고 싶은 정보만 담아서 보낼 수 있음

@RestControllerAdvice
public class ApiExceptionHandler {

    @ExceptionHandler({ApiException.class})
    public ResponseEntity handleException(ApiException ex){
        Map<String, String> errors = new HashMap<>();
        errors.put("error_user_msg", ex.getErrorCode().name());
        errors.put("error_code", ex.getErrorCode().getErrorCode()+"");
        return ResponseEntity.badRequest().body(errors);
    }
}
  • 클래스를 따로 만들어서 new 로 객체로 보낼수도 있는데 본인은 이런방식이 더 편해서 map 에 담아 보냄

    • 차이가 있는지 확인해봐야겠음

  • 에러처리를 주고 싶은곳에 아래처럼 에러를 날리면됨

if (user == null)
	throw new ApiException(ErrorCode.ERROR_USER);
  • 응답예시

{
    "error_code": "410",
    "error_user_msg": "ERROR_USER_PASSWORD"
}
  • exception 에러핸들링 설명 끝판왕으로 잘되있음

  • 참조

https://cheese10yun.github.io/spring-guide-exception/
https://velog.io/@kiiiyeon/스프링-ExceptionHandler를-통한-예외처리
https://pjh3749.tistory.com/273
오류코드.pdf
스크린샷 2022-10-27 오전 9.26.02.png