Contents
REST API 서버는 데이터만 돌려주는 서버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