728x90
REST API를 호출하기 위해 API의 반환을 ResponseEntity를 사용하는 경우가 많습니다.
원하는 기능들을 생성하여 ResponseEntity를 대체하는 Custom Response를 제작하겠습니다.
회원가입 예제
기존의 ResponseEntity<T>
public ResponseEntity<UserJoinResponse> join2(@RequestBody UserJoinRequest dto){
UserDto user = userService.join(dto);
return ResponseEntity.ok().body(new UserJoinResponse(user.getId(), user.getUserName()));
}
커스텀 된 Response<T> 사용
public Response<UserJoinResponse> join(@RequestBody UserJoinRequest dto){
UserDto user = userService.join(dto);
return Response.success(new UserJoinResponse(user.getId(), user.getUserName()));
}
차이점
두 가지 방법 모두 DB에 이상 없이 저장되는 것을 볼 수 있습니다.
하지만 리턴되는 JSON을 보시면 차이점이 드러납니다.
Custom Response를 사용하여 받은 응답을 확인해 보면 "resultCode"가 존재하고 있습니다.
그리고 "userId"와 "userName"이 "result"라는 객체에 묶여 있습니다.
이렇듯 원하는 정보를 커스텀해서 반환할 수 있게 구현하는 할 수 있습니다.
만드는 법
- Response Class를 생성합니다.
- Class명도 Package 위치도 상관이 없지만 본인의 경우에는 *.domain 패키지에 Response.Class 파일을 제작하였습니다.
- 타입을 지정할 수 있도록 클래스에 제네릭을 붙여줍니다.
- @AllArgsConstructor를 사용하거나 필드에 있는 모든 변수들을 포함한 전체 생성자를 생성합니다.
- Getter를 생성합니다.
- 필드에 넣고 싶은(커스텀 하고 싶은) 정보들을 담을 변수를 생성합니다.
- 저는 String 형식의 resultCode, <T> 타입의 result를 만들겠습니다.
- 커스텀 메서드를 생성합니다.
- 저는 error와 success를 반환하는 메서드 두 가지를 만들었습니다.
코드
@AllArgsConstructor
@Getter
public class Response <T>{
private String resultCode;
private T result;
public static <T> Response<Void> error(String resultCode, T result){
return new Response(resultCode, result);
}
public static <T> Response<T> success(T result) {
return new Response("SUCCESS", result);
}
}
반응형
'Server > Spring&Spring Boot' 카테고리의 다른 글
[JPA] Update 후 해당 객체를 Return했을 때 @CreatedDate가 null 이 반환되는 상태에 대한 회고 (0) | 2023.01.06 |
---|---|
[Spring] 전역 예외, Global Exception 생성 (0) | 2022.12.21 |
[Spring Security] config 설정 2 (0) | 2022.12.04 |
[Spring] @RequestBody 바인딩 시, 기본 생성자(@NoArgsConstructor)의 변덕과 필요한 이유 (0) | 2022.12.01 |
[Spring Security] config 설정 1 (0) | 2022.11.29 |