본문 바로가기

개발과/"Spring"이 왔나 봄

troubleshooting : http statusCode

http status code

상황 : status code를 response body에 담아서 보내줬던 상황이었다. 후에 PE에서 지정된 status code를 받고 싶어 아였고 그래서 코드들을 지정해주고 보냈지만

하지만 PE 개발자 팀원 분들이 원하는 코드를 보냈는데 받지 못하는 현상이 발생 하였다.

 public class StatusCode {

    public static final int OK = 200;
    public static final int CREATED = 201;
    public static final int NO_CONTENT = 204;
    public static final int BAD_REQUEST =  400;
    public static final int UNAUTHORIZED = 401;
    public static final int FORBIDDEN = 403;
    public static final int NOT_FOUND = 404;

    public static final int ID_DUPLICATE = 409;
    public static final int INTERNAL_SERVER_ERROR = 500;
    public static final int SERVICE_UNAVAILABLE = 503;
    public static final int DB_ERROR = 600;
}
//수정전
package com.example.miniproject.exception;

import com.example.miniproject.dto.http.DefaultDataRes;
import com.example.miniproject.dto.http.DefaultRes;
import com.example.miniproject.dto.http.StatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@ControllerAdvice
@RestController
public class ExceptionAdvisor {

    // CustomException 처리
    @ExceptionHandler(value = {CustomException.class})
    public ResponseEntity<Object> handleCustomException(CustomException ex) {
        String msg = ex.getMsg();
        int statusCode = ex.getStatusCode();

        return ResponseEntity.badRequest().body(new DefaultRes<>(msg,statusCode));
    }

//수정후
@ExceptionHandler(value = {CustomException.class})
    public ResponseEntity<Object> handleCustomException(CustomException ex) {
        String msg = ex.getMsg();
        int statusCode = ex.getStatusCode();

        return ResponseEntity.status(statusCode).body(new DefaultRes<>(msg));

수정 후 body애서 statusCode 반환하지 않도록 변경!

알게된 점 : statusCode의 정확한 위치와 statusCode로 프론트와 소통하는 방법!

근데 개발자 도구.네트워크에 보니 responseHeader와 general은 또 다른 영역이던데 그럼 API 명세서에는 따로 기입을 안해도 되는 건지? 아니면 칸을 만들어 추가적인 기입이 필요한 건지 그것도 궁금합니다!