➡️ 프로젝트 진행에 있어서 API의 응답을 통일하는 것은 필수
일반적인 API 응답 형태
{
isSuccess : Boolean
code : String
message : String
result : {json}
}
ex) 클래스명 : ApiResponse
@JsonPropertyOrder -> Jackson 애노테이션, JSON 속성의 순서 지정
@JsonProperty("name") -> JSON에서 해당 속성의 이름 정의
@JsonInclude(JsonInclude.Inclue.속성값) -> JSON에 포함 여부 결정
@Getter
@AllArgsConstructor
@JsonPropertyOrder({"isSuccess", "code", "message", "result"})
public class ApiResponse<T> { // 어떤 타입을 다룰 지 모름 -> 제네릭 타입
@JsonProperty{"isSuccess"}
private final Boolean isSuccess;
//isSuccess필드는 JSON에서 isSuccess라는 이름으로 사용
private final String code;
private final Stirng message;
@JsonInclude(JsonInclude.Inclue.NON_NULL)
private T result;
//...
}
@Getter
@AllArgsConstructor
public enum BaiscErrorStatus {
BAD_REQUEST(HttpStatus.BAD_REQUEST, "400 Bad Request", "잘못된 요청입니다."),
UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "401 UNAUTHORIZED", "인증이 필요합니다."),
//...
Enum상수명(HttpStatus.httpstatus, "code", "message")
;
private final HttpStatus httpStatus;
private final String code;
private final String message;
// 오류 이유 DTO 반환 메서드
// 오류 이유 + HttpStatus 정보 DTO 반환 메서드
//...
}
<참고>
DTO는 public static class로 선언
public class UserDTO {
public static class UserInfoDTO {
//...
}
public static class UserBodyInfoDTO {
//...
}
}
DTO는 여러 곳에서 사용될 수 있음 ➡️ 범용적으로 사용하기 위함
@Controller + @ResponseBody
API 통신을 위해 사용
어노테이션 기반으로 코드를 자동완성 해주는 라이브러리
반복되는 getter, setter, toString 등의 메서드 작성 코드를 줄여줌
예시
@Getter @Setter
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor
@EqualsAndHashCode
@ToString
@Data
@Builder
@Delegate
@RestControllerAdvice
@RestControllerAdvice(annotations = {RestController.class})
➡️ Advice 클래스가 @RestController 애노테이션이 부여된 클래스에만 적용하도록
➡️ RESTful API 엔드포인트 처리하는 컨트롤러에서 발생하는 예외에 대한 처리 담당
public class AdviceClass extends ResponseEntityExceptionHandler
ResponseEntityExceptionHandler ➡️ Spring MVC의 기본 예외 처리 로직 제공
(예외 발생 시에 어떻게 응답할지에 대한 메서드들 정의되어 있음)
@org.springframework.web.bind.annotation.ExceptionHandler
@ExceptuonHanlder(value=예외 클래스)
ex)java
// GeneralException 예외가 발생했을 때 메서드 호출
@ExceptionHandler(value = GeneralException.class)
ResponseEntity< T >