오답노트

[Spring] Exception과 Validation 본문

Java/Spring

[Spring] Exception과 Validation

권멋져 2023. 7. 14. 10:45

Spring은 엔터프라이즈급 프레임워크이기 때문에 수많은 API가 있을 수 있다. 이에 따른 예외처리를 하기 위해 Spring에서는 전역으로 Exception을 발생시킬 수 있는데, 이를 이용하여 사용자 친화적인 Validation을 만들어 보자

 

    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public ResponseEntity methodArgumentNotValidException(MethodArgumentNotValidException e, HttpServletRequest httpServletRequest){

        List<Error> errorList = new ArrayList<>();

        BindingResult bindingResult = e.getBindingResult();
        bindingResult.getAllErrors().forEach(error -> {
            FieldError field = (FieldError) error;

            String fieldName = field.getField();
            String message = field.getDefaultMessage();
            String value = field.getRejectedValue().toString();

            Error errorMsg = new Error();
            errorMsg.setField(fieldName);
            errorMsg.setInvalidValue(value);
            errorMsg.setMsg(message);

            errorList.add(errorMsg);

        });

        ErrorResponse errorResponse = new ErrorResponse();
        errorResponse.setErrorList(errorList);
        errorResponse.setMsg("");
        errorResponse.setRequestUrl(httpServletRequest.getRequestURI());
        errorResponse.setStatusCode(HttpStatus.BAD_REQUEST.toString());
        errorResponse.setResultCode("FAIL");

        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorResponse);
    }

위 코드는 예외가 발생한 상황들을 List에 담고, 이를 포함한 인스턴스를 만들어 body에 응답하도록 했다.

이로써 사용자가 자신이 어떤 파라미터가 틀렸는지 정확하게 알 수 있다.

 

예외된 결과

 

'Java > Spring' 카테고리의 다른 글

[Spring] Interceptor  (0) 2023.07.14
[Spring] Filter  (0) 2023.07.14
[Spring] Exception  (0) 2023.07.14
[Spring] Validation  (0) 2023.07.13
[Spring] AOP  (0) 2023.07.13