package com.its.op.exception; import lombok.extern.slf4j.Slf4j; import org.springframework.context.support.DefaultMessageSourceResolvable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import javax.servlet.http.HttpServletRequest; import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @Slf4j @ControllerAdvice public class ExceptionControllerAdvisor {//} extends ResponseEntityExceptionHandler { /*@Override protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { List errorList = ex .getBindingResult() .getFieldErrors() .stream() .map(DefaultMessageSourceResolvable::getDefaultMessage) .collect(Collectors.toList()); return new ResponseEntity<>( NotValidExceptionResponse.builder() .timestamp(LocalDateTime.now()) .status(HttpStatus.BAD_REQUEST.value()) .title("Arguments Not Valid") .developerMessage(ex.getClass().getName()) .err(errorList) .build(), HttpStatus.BAD_REQUEST ); }*/ @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity methodValidException(MethodArgumentNotValidException ex, HttpServletRequest request) { log.warn("MethodArgumentNotValidException 발생!!! url:{}, trace:{}",request.getRequestURI(), ex.getStackTrace()); List errorList = ex .getBindingResult() .getFieldErrors() .stream() .map(DefaultMessageSourceResolvable::getDefaultMessage) .collect(Collectors.toList()); //ErrorResponse errorResponse = makeErrorResponse(e.getBindingResult()); //return new ResponseEntity(errorResponse, HttpStatus.BAD_REQUEST); return new ResponseEntity<>( ErrorResponse.builder() .timestamp(LocalDateTime.now()) .status(HttpStatus.BAD_REQUEST.value()) .title("Arguments Not Valid") .message(ex.getClass().getName()) .errors(errorList) .build(), HttpStatus.BAD_REQUEST); } /* private ErrorResponse makeErrorResponse(BindingResult bindingResult) { String code = ""; String description = ""; String detail = ""; //에러가 있다면 if (bindingResult.hasErrors()) { //DTO에 설정한 meaasge값을 가져온다 detail = bindingResult.getFieldError().getDefaultMessage(); //DTO에 유효성체크를 걸어놓은 어노테이션명을 가져온다. String bindResultCode = bindingResult.getFieldError().getCode(); switch (bindResultCode){ case "NotNull": //code = ErrorCode.NOT_NULL.getCode(); //description = ErrorCode.NOT_NULL.getDescription(); break; case "Min": //code = ErrorCode.MIN_VALUE.getCode(); //description = ErrorCode.MIN_VALUE.getDescription(); break; } } return new ErrorResponse(0, code, null); } */ }