Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exception 컨벤션 #24

Merged
merged 6 commits into from
Aug 12, 2024
Merged

Exception 컨벤션 #24

merged 6 commits into from
Aug 12, 2024

Conversation

kimhyun5u
Copy link
Member

@kimhyun5u kimhyun5u commented Aug 12, 2024

💡 다음 이슈를 해결했어요.

Issue Link - #20

Discussion Link - #14


💡 이슈를 처리하면서 추가된 코드가 있어요.

  • HttpStatusException: HttpStatus 와 관련된 Exception
    • 아래는 HttpStatusException 을 상속합니다.
      • BadRequestException: 400 에러에 대한 Exception
      • UnauthorizedException: 401 에러에 대한 Exception
      • ForbiddenException: 403 에러에 대한 Exception
      • NotFoundException: 404 에러에 대한 Exception
      • MethodNotAllowedException: 405 에러에 대한 Exception
      • ConflictException: 409 에러에 대한 Exception
  • ErrorCode: 에러 코드를 통해 명시된 에러를 공유한다.
  • CustomRestControllerAdvice: ControllerAdvice 기본 생성 우선 순위 문제 때문에 생성한 CustomRestControllerAdvice
    • 기존 RestControllerAdvice 보다 우선 순위가 한 단계 높다.

💡 이런 고민을 했어요.

  • RestControllerAdvice 의 우선 순위를 어떻게 관리할까?
  • Exception 이 많아지면서 관리하기 더 어려워지는 거 아닐까?

💡 다음 자료를 참고하면 좋아요.

TestNotFoundException.java

package camp.woowak.lab.web.api;

import camp.woowak.lab.common.exception.NotFoundException;

public class TestNotFoundException extends NotFoundException {
	public TestNotFoundException() {
		super(TestErrorCode.PAGE_NOT_FOUND);
	}
}

TestErrorCode.java

package camp.woowak.lab.web.api;

import camp.woowak.lab.common.exception.ErrorCode;

public enum TestErrorCode implements ErrorCode {
	PAGE_NOT_FOUND(404, "C001", "Page Not Found");
	private final int status;
	private final String errorCode;
	private final String message;

	TestErrorCode(int status, String errorCode, String message) {
		this.status = status;
		this.errorCode = errorCode;
		this.message = message;
	}

	@Override
	public int getStatus() {
		return status;
	}

	@Override
	public String getErrorCode() {
		return errorCode;
	}

	@Override
	public String getMessage() {
		return message;
	}
}

TestExceptionHandler.java

package camp.woowak.lab.web.api;

import org.springframework.http.HttpStatusCode;
import org.springframework.http.ProblemDetail;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;

import camp.woowak.lab.common.advice.CustomRestControllerAdvice;
import camp.woowak.lab.common.exception.NotFoundException;

@CustomRestControllerAdvice(basePackageClasses = TestController.class)
public class TestControllerAdvice {

	@ExceptionHandler(NotFoundException.class)
	public ResponseEntity<ProblemDetail> handlePageNotFoundException(TestNotFoundException e) {
		ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(
			HttpStatusCode.valueOf(e.errorCode().getStatus()),
			e.errorCode().getMessage());
		problemDetail.setProperty("errorCode", e.errorCode().getErrorCode());

		return ResponseEntity.status(HttpStatusCode.valueOf(e.errorCode().getStatus()))
			.body(problemDetail);
	}
}

✅ 셀프 체크리스트

  • 내 코드를 스스로 검토했습니다.
  • 필요한 테스트를 추가했습니다.
  • 모든 테스트를 통과합니다.
  • 브랜치 전략에 맞는 브랜치에 PR을 올리고 있습니다.
  • 커밋 메세지를 컨벤션에 맞추었습니다.
  • wiki를 수정했습니다.

- HttpStatus 에 기반한 exception 구현
- BadRequestException: 400 에러에 대한 Exception
- UnauthorizedException: 401 에러에 대한 Exception
- ForbiddenException: 403 에러에 대한 Exception
- NotFoundException: 404 에러에 대한 Exception
- MethodNotAllowedException: 405 에러에 대한 Exception
- ConflictException: 409 에러에 대한 Exception
- ControllerAdvice 기본 생성 우선 순위 문제 때문에 생성한 CustomRestControllerAdvice
- 기존 RestControllerAdvice 보다 우선 순위가 한 단계 높다.
@kimhyun5u kimhyun5u linked an issue Aug 12, 2024 that may be closed by this pull request
@kimhyun5u kimhyun5u requested a review from a team August 12, 2024 12:24
@kimhyun5u kimhyun5u self-assigned this Aug 12, 2024
@kimhyun5u kimhyun5u added ✨ Feature 기능 개발 ⚙ Setting 개발 환경 세팅 labels Aug 12, 2024
@kimhyun5u kimhyun5u added this to the 프로토타입 만들기 milestone Aug 12, 2024
@kimhyun5u kimhyun5u changed the title common exception Exception 컨벤션 Aug 12, 2024
- DomainExceptionHandler 로 변경했습니다.
Copy link
Member

@Dr-KoKo Dr-KoKo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

공통적으로 사용되는 클래스라서 네이밍이 고민되시겠네요 ㅎㅎ
전혀 파악되지 않는 네이밍이 아니라면 고민하지 마시고 편안하게 결정지으셔도 될 것 같습니다.

@Dr-KoKo Dr-KoKo requested review from Hyeon-Uk and june-777 August 12, 2024 13:55
Copy link
Member

@june-777 june-777 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍👍

@Dr-KoKo Dr-KoKo merged commit 993a90c into main Aug 12, 2024
1 check passed
@kimhyun5u kimhyun5u deleted the featurue/20_kimhyun5u_Common_Exception branch August 12, 2024 23:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 기능 개발 ⚙ Setting 개발 환경 세팅
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

[공통] GlobalExeptionHandler + ErrorCode + common exception
4 participants