SpringBoot 응답 처리

김성인·2023년 10월 4일
0

🍃 SpringBoot

목록 보기
11/18
post-thumbnail

공통 응답

Json으로 반환 되는 응답 클래스를 담기 위한 데이터 메시지 포맷을 설정하였다.

😁Reponse Class

@Data
public class DataMessage<T> {

    private ResponseCode status;
    private T data;

    public static <T> DataMessage<T> success(T data){
        return new DataMessage<>(SUCCESS, data);
    }

    private DataMessage(ResponseCode status, T data){
        this.status = status;
        this.data = data;
    }
}

😁ResponseCode

@Getter
@AllArgsConstructor
public enum ResponseCode {

    // 200
    SUCCESS(200, "SUCCESS", "요청 성공"),

    // 400
    INVALID_JWT(400, "JWT-ERROR-01", "유효하지 않은 JWT"),
    EMPTY_JWT(400, "JWT-ERROR-00", "JWT 에러"),

    // 500
    INTERNAL_SERVER_ERROR(500, "SERVER-ERROR-00", "서버 에러"),
    ;

    private final int status;
    private final String code;
    private final String description;

}

사용

데이터 생성 시 발생하는 응답 클래스를 해당 포멧에 담아 ResponseEntity의 바디 값으로 전달해준다.


ResponseEntity

스프링 부트에서 제공하는 응답 엔티티 클래스

	/**
	 * Create a {@code ResponseEntity} with a body and status code.
	 * @param body the entity body
	 * @param status the status code
	 */
	public ResponseEntity(@Nullable T body, HttpStatus status) {
		this(body, null, status);
	}

예외 처리

🤣Exception Handler

import com.jpa.practice.config.BusinessException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(BusinessException.class)
    protected ResponseEntity<ErrorResponse> handleBusinessException(BusinessException e) {
        ResponseCode responseCode = e.getErrorCode();
        ErrorResponse response = new ErrorResponse(responseCode.getCode(), responseCode.getDescription());

        return new ResponseEntity<>(response, HttpStatus.valueOf(responseCode.getStatus()));
    }
}

🤣ErrorResponse

@Getter
@AllArgsConstructor
public class ErrorResponse {

    private final String code;
    private final String message;


}

🤣Exception 클래스

public class BusinessException extends RuntimeException{

    private ResponseCode responseCode;

    public BusinessException(ResponseCode responseCode) {
        this.responseCode = responseCode;
    }

    public ResponseCode getErrorCode(){
        return responseCode;
    }
}

비즈니스에서 예외 발생시 해당 커스텀 예외 클래스에 응답 코드를 할당하여 반환되는 값을 설정할 예정이다.

이전에 예외처리 핸들러를 작성하지 않았을 때는 모든 함수가 예외 처리를 핸들링 하도록 throws 예약어를 사용해야했고, try catch 등을 써서 항상 블럭을 나눠야했다.

예외처리 핸들러를 통해 클린코드를 작성 가능했음..!

예외 처리 핸들러 미 사용시

예외 처리 핸들러 사용시


예외처리
https://jaehoney.tistory.com/275

https://velog.io/@doker/Spring-boot-%EC%98%88%EC%99%B8%EC%97%90%EB%9F%AC-%EC%B2%98%EB%A6%AC

공통 응답
https://velog.io/@qotndus43/%EC%8A%A4%ED%94%84%EB%A7%81-API-%EA%B3%B5%ED%86%B5-%EC%9D%91%EB%8B%B5-%ED%8F%AC%EB%A7%B7-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0

0개의 댓글