1) RestControllerAdvice에서 SpringMVC 예외를 간결하게 처리하기 위해서 ResponseEntityException을 상속받아 처리했다. 그런데, 사용자 정의 예외와 스프링 MVC예외의 Response 형식이 다르다. 이 형식을 포맷 시켜보자.
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) {
List<ValidationError> errors = ex.getBindingResult().getFieldErrors()
.stream()
.map(c -> ValidationError.of(messageSource, c)).filter(Objects::nonNull).collect(Collectors.toList());
CommonErrorCode errorCode = CommonErrorCode.INVALID_PARAMETER;
ErrorResponse errorResponse = new ErrorResponse(errorCode.getHttpStatus().value(), errorCode.getHttpStatus(), errorCode.getMessage(), errors);
return handleExceptionInternal(ex, errorResponse, headers, status, request);
}
위 처럼 재정의를 통해서 포맷을 일치시켰다. 단점은 모둔 SpringMVC 예외를 재정의해야한다는것.. 하지만 사용자 정의 포맷을 사용하려면 다른 방도가 없나보다..