그니까 controller에 @ExceptionHandler를 이용해서 예외 종류마다 각각 예외처리를 할 수 있는데
에러 응답 메세지를 필요한 정보만 정리해서 전달 할 수 있도록 ErrorResponse 클래스에 선언해놓은 필드와 그 getter로 객체 생성해서
handle메소드 내부에서 stream, map,collect을 이용하여 ErrorResponse 객체 리스트로 반환.
이러면 controller마다 해줘야하고 예외 종류마다 코드 만들어줘야 해서
@RestControllerAdvice 애너테이션 이용해서 예외처리를 공통화.
전체 controller 아우를 수 있는 GlobalExceptionAdvice 클래스를 만들고
그 안에 @ExceptionHandler 애너테이션을 붙인 각 에러 핸들링 메소드를 만들어준다.
위 handle 메소드와 다르게 Error Response 정보를 만드는 역할을 ErrorResponse 클래스가 하도록
여기서 ErrorResponse를 반환 타입으로 만들어서 ErrorResponse of 호출 매개변수로 각 에러 묶음 타입 객체 전달
//각 에러 묶음 타입 객체에 대한 ErrorResponse 객체 생성하기 위해 ErrorResponse 의 of 메서드.
주로 객체 생성시 어떤 값들의 객체를 생성한다는 의미에서 of() 메서드를 사용.
-MethodArgumentNotValidException 에서 에러 정보를 얻기 위해 필요한 것이 바로 BindingResult 객체이므로 이 of() 메서드를 호출하는 쪽에서 BindingResult 객체를 파라미터로 넘겨주면 됨. - 에러.getBindingResult() 넘겨주더라
-ConstraintViolationException 에서 에러 정보를 얻기 위해 필요한 것이 바로 Set<ConstraintViolation<?>> 객체이므로 이 of() 메서드를 호출하는 쪽에서 Set<ConstraintViolation<?>> 객체를 파라미터로 넘겨주면 됨. - 에러.getConstraintViolation()넘겨주더라
ErrorResponse 의 of 메소드는 매개변수로 각 에러 묶음 타입 객체 받아와서 반환값으로 ErrorResponse 생성자를 반환.
그 ErrorResponse 생성자의 매개변수로 각 에러에 맞는 에러 클래스의 of 메소드 넣어줌.
// 각 에러 클래스의 of 메소드는 각 에러 가공하기 위함.
그 of 메소드 매개변수로 각 에러 묶음 타입 객체 전달.
그 각 에러의 에러 클래스는 에러 묶음 타입 에러 받아서 그 정보중 에러타입 클래스의 필드변수로 선언한 정보만 저장한 각 에러타입 객체 리스트 만들어서 반환.
-이 반환된게 ErrorResponse 생성자 매개변수로 들어가서 ErrorResponse 객체의 각 필드 변수에 해당값 저장.
-이 객체가 ErrorResponse 의 of 메서드 호출된 곳, GlobalExceptionAdvice의 handle메소드 반환값으로 이 객체가 반환됨.
+@RestControllerAdvice = @ControllerAdvice + @ResponseBody
@RestControllerAdvice 애너테이션은 @ControllerAdvice 의 기능, @ResponseBody 의 기능을 둘 다 포함하고 있기 때문에
JSON 형식의 데이터를 Response Body로 전송하기 위해서 ResponseEntity로 데이터를 래핑할 필요가 없음.
+@ResponseStatus 애너테이션으로 HTTP Status를 대신 표현할 수 있다.
'부트캠프 TIL' 카테고리의 다른 글
22.12.28 JPA 방식 엔티티 간의 연관 관계 매핑 (1) | 2022.12.29 |
---|---|
22.12.23 Spring Data JDBC 도메인 엔티티 클래스 (0) | 2022.12.23 |
22.12.14 throw throws 참고 링크 (0) | 2022.12.14 |
22.12.14 pointcut 표현식 참고 링크 (0) | 2022.12.14 |
22.12.12 헷갈려서 맨날 구글링하는 배열 복사 Arrays.copyOf, System.arraycopy (0) | 2022.12.12 |