[스프링 부트] 25. 게시판 v3 예외처리 추가

lhs's avatar
Nov 21, 2024
[스프링 부트] 25. 게시판 v3 예외처리 추가
 

3. Exception400, Exception404

public class Exception400 extends RuntimeException { public Exception400(String message) { super(message); } }
  • HTTP 400 오류를 나타내는 사용자 정의 예외 클래스
public class Exception404 extends RuntimeException { public Exception404(String message) { super(message); } }
  • HTTP 404 오류를 나타내는 사용자 정의 예외 클래스

2. MyControllerAdvice

@ControllerAdvice public class MyControllerAdvice { @ResponseBody @ExceptionHandler(Exception400.class) public String err400(Exception400 e) { System.out.println("err400"); String body = """ <script> alert('${msg}'); history.back(); </script> """.replace("${msg}", e.getMessage()); return body; } @ResponseBody @ExceptionHandler(Exception404.class) public String err404(Exception404 e) { System.out.println("err404"); String body = """ <script> alert('${msg}'); history.back(); </script> """.replace("${msg}", e.getMessage()); return body; } }
  • 예외가 발생했을 때 처리할 로직을 정의하는 ControllerAdvice 클래스
  • @ResponseBody 어노테이션을 사용하여, 예외 발생 시 문자열로 구성된 JavaScript 경고 메시지를 응답 본문으로 바로 반환한다.
  • @ExceptionHandler 어노테이션을 사용하여 HTTP 코드 400과 404인 경우를 각각 처리한다.

3. BoardService

@RequiredArgsConstructor @Service public class BoardService { private final BoardRepository boardRepository; @Transactional public void 게시글수정(int id, BoardRequest.UpdateDTO updateDTO) { // Board board = boardRepository.findById(id).orElseThrow(() -> new RuntimeException("해당 id의 게시글이 없습니다 : " + id)); Board board = boardRepository.findById(id).orElseThrow(() -> new Exception404("해당 id의 게시글이 없습니다 : " + id)); board.update(updateDTO.getTitle(), updateDTO.getContent()); } public BoardResponse.UpdateFormDTO 게시글수정화면보기(int id) { // Board board = boardRepository.findById(id).orElseThrow(() -> new RuntimeException("해당 id의 게시글이 없습니다 : " + id)); Board board = boardRepository.findById(id).orElseThrow(() -> new Exception404("해당 id의 게시글이 없습니다 : " + id)); return new BoardResponse.UpdateFormDTO(board); } public BoardResponse.DetailDTO 게시글상세보기(int id) { // Board board = boardRepository.findById(id).orElseThrow(() -> new RuntimeException("해당 id의 게시글이 없습니다 : " + id)); Board board = boardRepository.findById(id).orElseThrow(() -> new Exception404("해당 id의 게시글이 없습니다 : " + id)); return new BoardResponse.DetailDTO(board); } }
  • RuntimeException으로 처리하던 예외를 직접 구현한 Exception404로 처리한다.
Share article

LHS's Study Space