enumclassExceptionMessage(val statusCode: HttpStatus,val message: String) {TYPE_EXCEPTION(HttpStatus.BAD_REQUEST, "타입이 잘못되었습니다."),NOT_FOUND(HttpStatus.NOT_FOUND, "해당 데이터를 못 찾았습니다."),INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "알 수 없는 서버 에러입니다.")}
@Order(-2) 어노테이션을 넣은 이유는
만약 넣지 않게되면 예외가 발생 시 DefaultErrorWebExceptionHandler 가 발생하기때문에 GlobalExceptionHandler가 작동하지 않는 상황이 발생하기 때문에 우선순위를 -2로 설정을 해줬습니다.
DefaultErrorWebExceptionHandler의 우선순위는 -1
예외가 발생하면 Throwable의 Exception의 종류에 따라 Response를 만들면 되는데
하지만 저는 Exception의 종류는 한가지로 고정시키고 Exception 프로퍼티로 예외 내용을 가지고 있게끔 만들어줬습니다. (Exception 종류별로 만들어서 따로 처리해줘도 됩니다.)
HandlerStrategiesResponseContext에서는 생성한 Mono<ServerResponse>를 실제 Response에 설정을 하여 저희가 원하는 형태로 전달에 성공합니다.
예외 발생 시키기
// Post HandlerfungetHotPost(request: ServerRequest): Mono<ServerResponse> {val postType = request.pathVariable("postType")// 인기 게시물 타입if(postType !=="hot")throwApiException(ExceptionMessage.TYPE_EXCEPTION)....}
RuntimeException을 상속받은 Exception 종류를 throw 해주면 됩니다.