[REST API] 16. Blog V3 : Resp

문정준's avatar
May 12, 2025
[REST API] 16. Blog V3 : Resp

REST API 서버는 데이터만 돌려주는 서버

  • 변경된 값을 항상 다시 돌려줘야 함
  • GET, POST, PUT, DELETE
 

Resp

  • body와 상태 코드를 같이 전달하기 위해 Resp 객체 대신 ResponseEntity 사용
  • AuthorizationFilter에 사용할 Resp는 따로 오버로딩 필요
@AllArgsConstructor @Data public class Resp<T> { private Integer status; private String msg; private T body; // ResponseEntity 형태로 바로 리턴 (성공) public static <B> ResponseEntity<Resp<B>> ok(B body) { Resp<B> resp = new Resp<>(200, "성공", body); return new ResponseEntity<>(resp, HttpStatus.OK); } // ResponseEntity 형태로 바로 리턴 (실패) public static ResponseEntity<Resp<?>> fail(HttpStatus status, String msg) { Resp<?> resp = new Resp<>(status.value(), msg, null); return new ResponseEntity<>(resp, status); } public static Resp<?> fail(Integer status, String msg) { // 스프링 도움 안받을때!! Resp<?> resp = new Resp<>(status, msg, null); return resp; } }
 

GlobalExceptionHandler

  • Resp → ResponseEntity로 수정
@RestControllerAdvice // @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ExceptionApi400.class) public ResponseEntity<?> exApi400(ExceptionApi400 e) { return Resp.fail(HttpStatus.BAD_REQUEST, e.getMessage()); } @ExceptionHandler(ExceptionApi401.class) public ResponseEntity<?> exApi401(ExceptionApi401 e) { return Resp.fail(HttpStatus.UNAUTHORIZED, e.getMessage()); } @ExceptionHandler(ExceptionApi403.class) public ResponseEntity<?> exApi403(ExceptionApi403 e) { return Resp.fail(HttpStatus.FORBIDDEN, e.getMessage()); } @ExceptionHandler(ExceptionApi404.class) public ResponseEntity<?> exApi404(ExceptionApi404 e) { return Resp.fail(HttpStatus.NOT_FOUND, e.getMessage()); } @ExceptionHandler(Exception.class) public ResponseEntity<?> exUnKnown(Exception e) { System.out.println("관리자님 보세요 : " + e.getMessage()); // 로그를 파일에 기록해서 나중에 봐야함 return Resp.fail(HttpStatus.INTERNAL_SERVER_ERROR, "관리자에게 문의하세요"); } }
 
  • ResponseEntity 사용 시 @ResponseBody를 사용하지 않아도 됨
@GetMapping("/api/board/{id}") public ResponseEntity<?> getBoardOne(@PathVariable("id") int id) { User sessionUser = (User) session.getAttribute("sessionUser"); BoardResponse.DTO respDTO = boardService.글보기(id, sessionUser.getId()); return Resp.ok(respDTO); }
Share article

sxias