-
[RestFul 학습] - EXCEPTION관리SPRING/WEBSERVICE 2020. 5. 28. 23:50
Rest Api에서 아래와 같이 id에 따른 List를 불러오려고 할 때 user 값이 존재하지 않으면 Exception을 일으키는 방식으로 response 를 내려줄 수 있다.
// GET /users/1 or /users/10 -> String @GetMapping("/users/{id}") public User retrieveUser(@PathVariable int id) { User user =service.findOne(id); if (user == null) { throw new UserNotFoundException(String.format("ID[%s] not found", id)); } return user; }
아래와 같이 @ResponseStatus에 404 코드를 세팅하면 Http response code를 404로 내려주는 것이 가능하다.
@ResponseStatus(HttpStatus.NOT_FOUND) public class UserNotFoundException extends RuntimeException { public UserNotFoundException(String message) { super(message); // TODO Auto-generated constructor stub } }
아래와 같이 @Controller 전체에서 Exception을 잡아주는 @ControllerAdvice를 사용하면 예외 발생시 캐치하여 처리할 수 있다. 이떄 ResponseEntityExceptionHandler를 사용하도록 한다.
UserNotFoundException 클래스의 ExcetionHandler를 이용하여 아래와 같이 ExceptionResponse 를 내려줄 수있다.
(JSON방식)
이러한 방식으로 Exception들은 한 클래스에서 관리할 수가 있다.
@RestController @ControllerAdvice public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler{ @ExceptionHandler(Exception.class) public final ResponseEntity<Object> handleAllExcetipon(Exception ex, WebRequest request) { System.out.println("Exception..."); ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false)); return new ResponseEntity(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR); } @ExceptionHandler(UserNotFoundException.class) public final ResponseEntity<Object> handleUserNotFoundException(Exception ex, WebRequest request) { ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage(), request.getDescription(false)); return new ResponseEntity(exceptionResponse, HttpStatus.NOT_FOUND); } }
ExceptionResponse class :
@Data @AllArgsConstructor @NoArgsConstructor public class ExceptionResponse { private Date timestamp; private String message; private String details; }
결과 :
'SPRING > WEBSERVICE' 카테고리의 다른 글
[Restuful 학습] - PostMapping 설명 및 예제 (0) 2020.08.03 [Restuful 학습] - GetMapping 설명 및 예제 (0) 2020.08.01 [Restful 학습] - PathVariable (0) 2020.08.01 [Resutful 학습] - 기본적인 Rest 구현 (0) 2020.05.18 SOAP과 REST 비교 (0) 2020.05.17