일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 잠실새내
- 잠실새내 도그존
- 토라비
- apollo react native
- 운정 소바동
- 화이트해커를 위한 웹 해킹의 기술
- graphql react native
- 지보싶 신촌점
- 화이트 해커를 위한 웹 해킹의 기술
- typescript
- graphql mutation error
- 앙버터마카롱
- apolloclient
- graphql with reactnative
- graphql with RN
- 비동기배열
- 도그존
- 홍대 카페 장쌤
- 홍대 토라비
- promise처리
- useMutation error
- 예쁜술집 예술
- 홍대 예술
- 금별맥주
- graphql
- 고르드
- 비동기배열처리방법
- 신촌 소문난집
- graphql 400
- promise메서드
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
[BE/spring boot] custom Response DTO 만들기 본문
Today I Learned
: request에 대한 응답, http response를 하기 위해 Response DTO를 생성하고 재사용할 수 있었다.
배경
원래는 ResponseEntity의 body에 값을 넣어주는 형태로 응답을 했다. 그치만 body에서 필요한 데이터만 보내준다는 점이 마음에 들지 않았다.
응답에서 내용만 들어가는게 아니라 status, code, message 등의 정보가 같이 들어갔으면 했고, 또 해당 정보들은 성공했을때, 실패했을때, 등등으로 나뉘어질 수 있었으면 좋겠다고 생각을 해서 ResponseDTO 를 새로 생성, 커스텀하기로 했다.
그치만 난 java 문법에 아직 익숙하지 않았고....... 열심히 사례가 없는지 구글링하며 엄청난 포스팅을 발견했다.
Contents
https://velog.io/@leeeeeyeon/Spring-boot-Response-%ED%98%95%EC%8B%9D-%EB%A7%8C%EB%93%A4%EA%B8%B0
들어가서 코드를 보면 알겠지만.. 댕쩐다!!! 나도 노력하면 이런 코드를 뚝딱 할 수 있겠지?!
전반적인 코드를 보면 ResponseDTO를 기본으로 생성하고 이를 상속받는 Error, Data Response DTO를 생성해준다.
해당 포스팅 코드가 멋져보였던 이유는 java에서 Exception 이 발생하면 ErrorResponse를 반환하도록 설정되어있다는 점 (java 문외한은 이런것도 멋져보인답니다)
그래서 controller에서 사용할 때, throw Exception 을 하면 ErrorResponse body가 응답에 들어간다!
사실 냅다 다 따라하면 적용은 되겠지만 내꺼가 되지는 못할거라고 생각해서 내 프로젝트에 필요한 단계까지만 반영하려고 노력했다.
나는 throw Exception 까지는 바라지 않고 ResponseDTO와 Error, Data 를 상속받는 부분을 필요하다고 생각하는 것만 적용해봤다.
Practice
//ResponseDTO
@Getter
@RequiredArgsConstructor
@ToString
public class ResponseDTO {
private final String status;
private final Integer code;
private final String message;
public static ResponseDTO of(String status, int code, String message) {
return new ResponseDTO(status,code,message);
}
}
//ErrorResponseDTO
public class ErrorResponseDTO extends ResponseDTO{
public ErrorResponseDTO(Integer code, String message) {
super("failed", code, message);
}
public static ErrorResponseDTO of(Integer code,String message){
return new ErrorResponseDTO(code,message);
}
}
//DataResponseDTO
@Getter
public class DataResponseDTO<T> extends ResponseDTO {
private final T data;
private DataResponseDTO(T data){
super("success",0,"success");
this.data = data;
}
private DataResponseDTO(T data, String message){
super("success",0,message);
this.data=data;
}
public static <T> DataResponseDTO<T> of(T data) {
return new DataResponseDTO<>(data);
}
public static <T> DataResponseDTO<T> of(T data, String message) {
return new DataResponseDTO<>(data, message);
}
public static <T> DataResponseDTO<T> empty() {
return new DataResponseDTO<>(null);
}
}
사실 별게 없어서.. 그냥 ResponseDTO에는 status, code, message 가 기본으로 꼭 들어가있어야하고
ErrorResponseDTO는 이를 상속받아서 status에 'failed' 만 미리 넣어주고 code와 message는 반환할 때 넣을 수 있다.
DataResponseDTO 는 Data만 넣을 수도 있고, message를 추가할 수도 있다. 대신 status는 'success'로 고정이고 code도 0으로 고정이다!
@PostMapping("/ledgers")
public ResponseDTO postLedger(
@RequestBody PostLedgerRequestDTO dto
){
if (dto.getTitle()==null){
return ErrorResponseDTO.of(400,"bad request");
}
ledgerService.saveLedger(dto);
return DataResponseDTO.empty();
}
사용할 때는 ResponseDTO를 반환한다고 명시하고, 원하는 Response를 선택해서 반환하면 된다.
Learned
참고한 포스팅보다 훨씬 간단하고 어찌보면 조잡할 수도 있지만 원하는대로 굴러간다! 이 점에서 나는 성장한 듯 ㅎㅎ
그치만 해당 포스팅의 Exception 처리에 ErrorResponseDTO를 적용한 방법은 꼭 배우고 싶다.
What I Will Study
custom error code 를 어떻게 정의할 지도 고민해봐야겠다. message도!
지금보다 다양한 상황에서 쓸 수 있도록 활용해봐야겠다.
참조
https://velog.io/@leeeeeyeon/Spring-boot-Response-%ED%98%95%EC%8B%9D-%EB%A7%8C%EB%93%A4%EA%B8%B0
'개발 > 프로젝트' 카테고리의 다른 글
[Next js/react-query] react query 설치 및 적용하기 (0) | 2023.12.31 |
---|---|
[FE/next js] 프론트 스택 정하기 및 next js 설치 (app router) (0) | 2023.12.17 |
[BE/spring boot] JAVA 설치 및 스프링 부트 서버 세팅 (1) | 2023.12.06 |
[BE/restful] 백엔드 스택, DB 정하기 (0) | 2023.11.29 |
[DB/RDBMS] ERD 설계 (1) | 2023.11.27 |