본문 바로가기
웹개발/스프링

중복 선언 메소드 우선순위 주기

by 코딩에서개발로. 2022. 6. 27.
반응형

@Slf4j
@RestControllerAdvice
@Order(1)
public class ControllerExceptionHandler {

@ExceptionHandler({BizRuntimeException.class})
@ResponseBody
public ResponseEntity<ResponseMessage> handleException(BizRuntimeException e) {

    log.error("BizRuntime Error Code : " + e.getErrorCode(), e);

    return new ResponseEntity<ResponseMessage>(ResponseMessage.builder()
            .resultCode(e.getErrorCode())
            .resultMessage(e.getErrorMessage())
            .detailMessage(e.getMessage())
            .build(), HttpStatus.NOT_ACCEPTABLE);
}

@ExceptionHandler({StatusRuntimeException.class})
@ResponseBody
public ResponseEntity<ResponseMessage> handleException(StatusRuntimeException e) {

    log.error("StatusRuntime Error Code : " + ResponseEnum.gRpcCallError.getCode(), e);

    return new ResponseEntity<ResponseMessage>(ResponseMessage.builder()
            .resultCode(ResponseEnum.gRpcCallError.getCode())
            .resultMessage(ResponseEnum.gRpcCallError.getDesc())
            .detailMessage(e.getMessage())
            .build(), HttpStatus.NOT_ACCEPTABLE);
}

@ExceptionHandler({Exception.class})
public ResponseEntity<ResponseMessage> handlException(Exception e) {

    log.error("Exception Error Code : " + ResponseEnum.InternalError.getCode(), e);

    return new ResponseEntity<ResponseMessage>(ResponseMessage.builder()
            .resultCode(ResponseEnum.InternalError.getCode())
            .resultMessage(ResponseEnum.InternalError.getDesc())
            .detailMessage(e.getMessage())
            .build(), HttpStatus.INTERNAL_SERVER_ERROR);
}

@ExceptionHandler({MethodArgumentNotValidException.class})
@ResponseBody
public ResponseEntity<Map<String, String>> MethodArgumentNotValidException(MethodArgumentNotValidException ex){
    Map<String, String> errors = new HashMap<>();
    ex.getBindingResult().getAllErrors()
            .forEach(c -> errors.put("resultMessage", c.getDefaultMessage()));
    return ResponseEntity.badRequest().body(errors);
}

}

MethodArgumentNotValidException 다른 라이브러리에서 선언시에 해당 클래스 미동작을 하여 클래스 상단에 @Order(1) 어노테이션 선언을 하면 해당 클래스가 우선권을 가진다.

반응형