반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- union
- 모놀리식
- 맥북
- 학점은행제무료강의
- jdk
- 의사결정나무모형
- it자격증
- Pass By Value
- SQL
- python
- 디렉토리계층구조
- fastapi
- 개인프로필스튜디오창업
- 컴퓨터공학학사취득
- 프로그래머스
- 코딩테스트
- 맥북환경설정
- MSA
- 은행IT
- 학점은행제
- jdk17
- 맥북셋팅
- 채널계
- 오라클
- oracleapex
- 코어뱅킹
- Homebrew
- 렌탈스튜디오창업
- DB
- 계정계
Archives
- Today
- Total
개발머해니
[스프링] 클라이언트가 에러났을때도 ResponseDTO를 내려달라고 하면 어떻게 해야할까? 본문
728x90
반응형
클라이언트가 에러났을때도 ResponseDTO를 내려달라고 하면 어떻게 해야할까?
정답은 간단합니다. API 요청에 성공해서 응답을 보내거나, 예외처리를 보낼 때 공통으로 사용할 ResponseDto를 구현해서 값을 내려주면 됩니다.
자세한 내용은 아래 블로그에서 확인 가능합니다!
중요한 핵심 내용만 참조해 보자면, 아래와 같이 정상응답이건 에러응답이건 모든 요청에 공통으로 보낼 형식을 만들어 줍니다.
@Getter
public class ApiResponseDto<T> {
private boolean success;
private T response;
private ErrorResponse error;
@Builder
private ApiResponseDto(boolean success, T response, ErrorResponse error) {
this.success = success;
this.response = response;
this.error = error;
}
}
그리고 요청 결과에 따라 알맞는 데이터를 넣어 ApiResponseDto를 생성할 static method를 만들어, 아래와 같이 사용할 수 있습니다.
① 정상 : TRUE + Response 조립
② 에러 : FALSE + Error Response 조립
③ 에러지만 정상데이터 요청 : FALSE + Response + Error Response 조립
public class ResponseUtils {
// 요청 성공인 경우
public static <T> ApiResponseDto<T> ok(T response) {
return ApiResponseDto.<T>builder()
.success(true)
.response(response)
.build();
}
// 에러 발생한 경우
public static <T> ApiResponseDto<T> error(ErrorResponse response) {
return ApiResponseDto.<T>builder()
.success(false)
.error(response)
.build();
}
// 요청 실패이지만 데이터를 내려줘야 할 경우
public static <T> ApiResponseDto<T> error(T response, ErrorResponse errorResponse) {
return ApiResponseDto.<T>builder()
.success(false)
.response(response)
.error(errorResponse)
.build();
}
}
ResponseEntity 대신 ApiResponseDto를 사용하는 이유는?
HttpStatus, HttpHeaders, HttpBody 데이터를 갖는 ResponseEntity 클래스를 활용할 수 있습니다.
다양한 생성자가 있기 때문에 응답 데이터가 없는 케이스, Http Header를 반환하지 않는 케이스 등 상황에 맞는 생성자를 선택해 사용할 수 있습니다.
하지만 예외가 발생하는 경우 응답 body로 plain/text가 전달됩니다.
즉 예외가 발생했을 때, 성공했을 때 응답의 모양이 달라지기 때문에 경우에 따라 응답 데이터의 형식이 달라지는 경우 상황에 따라 가변적으로 사용하기 어렵니다.
그래서 성공했을 때 형식과 실패했을 때 응답형식을 항상 json으로 통일시키기 위해 ApiResponseDto를 사용한 것입니다.
https://velog.io/@qotndus43/스프링-API-공통-응답-포맷-개발하기
728x90
반응형
'백엔드' 카테고리의 다른 글
[DB] Oracle Join 중에서 가장 성능이 좋은 쿼리는? (0) | 2023.09.01 |
---|---|
[DB] 오라클에 이모지(Emoji)를 저장할 수 있을까? (0) | 2023.08.31 |
[스프링] 예외처리 종류과 효과적인 사용 방법 (0) | 2023.08.29 |
[DB] 인덱스는 어떤 기준으로 잡는 게 좋을까? (0) | 2023.08.27 |
[DB] 파티션의 개념, 필요성, 종류 (0) | 2023.08.27 |