ResponseEntity
공식문서에 따르면
public class ResponseEntity<T> extends HttpEntity<T>
Extension of HttpEntity that adds an HttpStatusCode status code. Used in RestTemplate as well as in @Controller methods.
HttpEntity를 상속받아서 HttpStatusCode를 추가하여 HttpRequest에 대한 응답을 포함한 클래스이다.
private ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, Object status) {
super(body, headers);
Assert.notNull(status, "HttpStatus must not be null");
this.status = status;
}
생성자를 보면 body와 headers는 부모 클래스인 HttpEntity의 생성자를 호출하고 있고
ResponseEntity에서 추가된 HttpStatusCode는 멤버 변수를 초기화 해주는 것을 볼 수 있다.
Response를 위해 정의한 ResponseDto코드
@Getter
@AllArgsConstructor
public class ResponseDto {
private String code;
private String message;
public static ResponseEntity<ResponseDto> databaseError() {
ResponseDto responseBody = new ResponseDto(ResponseCode.DATABASE_ERROR, ResponseMessage.DATABASE_ERROR);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseBody);
}
public static ResponseEntity<ResponseDto> validationFailed() {
ResponseDto responseBody = new ResponseDto(ResponseCode.VALIDATION_FAILED, ResponseMessage.VALIDATION_FAILED);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseBody);
}
}
code와 message를 멤버 변수로 가지고 있다.
각자 에러코드와 에러 메세지를 담당한다.
response에 대한 기본 구조(뼈대)라고 볼 수 있다. api요청에 대한 반환값은 모두 ResponseDto를 상속받아서 구현 할것이다.
SignUpResponseDto(예시)
@Getter
public class SignUpResponseDto extends ResponseDto{
private SignUpResponseDto(){
super(ResponseCode.SUCCESS, ResponseMessage.SUCCESS);
}
public static ResponseEntity<SignUpResponseDto> success(){
SignUpResponseDto result = new SignUpResponseDto();
return ResponseEntity.status(HttpStatus.OK).body(result);
}
public static ResponseEntity<ResponseDto> duplicateEmail(){
ResponseDto result = new ResponseDto(ResponseCode.DUPLICATE_EMAIL, ResponseMessage.DUPLICATE_EMAIL);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(result);
}
public static ResponseEntity<ResponseDto> duplicateNickname(){
ResponseDto result = new ResponseDto(ResponseCode.DUPLICATE_NICKNAME, ResponseMessage.DUPLICATE_NICKNAME);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(result);
}
public static ResponseEntity<ResponseDto> duplicateTelNumber(){
ResponseDto result = new ResponseDto(ResponseCode.DUPLICATE_TEL_NUMBER, ResponseMessage.DUPLICATE_TEL_NUMBER);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(result);
}
}
회원가입 요청에 대한 응답 클래스이다.
생성자는 부모 클래스 ResponseEntity의 생성자를 호출해 code와 message를 success로 초기화 한다.
성공시에는 그대로 SignUpResponseDto를 body에 담아 보낸다.
에러가 나면 에러 케이스에 맞게 ResponseDto를 초기화해주고 ResponseDto 그대로 body로 보내준다.
postman으로 이미 데이터베이스에 존재하는 이메일을 요청으로 보냈을 때
code와 message에 에러가 반환되는 것을 볼 수 있다.
'Spring Boot' 카테고리의 다른 글
[블로그 프로젝트] Spring Boot Validation (0) | 2024.03.06 |
---|---|
ORM JPA Hibernate Spring Data JPA (0) | 2024.01.30 |
Mapping을 인식하지 못할 때(Java VScode Clean) (0) | 2024.01.17 |
스프링 부트 Controller, DTO (0) | 2024.01.12 |
[블로그 프로젝트] 스프링 프로젝트 생성 (0) | 2024.01.12 |