[DTO 유효성 검증]으로 클라이언트 요청 데이터의 유효성 검증에 실패할 경우에는 아래와 같은 응답 메시지를 확인할 수 있었습니다.

Response Body의 내용만으로는 요청 데이터 중에서 어떤 항목이 유효성 검증에 실패했는 지 알 수가 없습니다.
클라이언트 쪽에서 에러메시지를 조금 더 구체적으로 알 수 있도록 바꾸는 작업이 바로 @ExceptionHandler입니다. Spring이 처리하는 에러 응답 메시지를 우리가 직접 처리하도록 코드를 수정할 수 있습니다.
...
...
@PostMapping
public ResponseEntity postMember(@Valid @RequestBody MemberPostDto memberDto) {
Member member = mapper.memberPostDtoToMember(memberDto);
Member response = memberService.createMember(member);
return new ResponseEntity<>(mapper.memberToMemberResponseDto(response),
HttpStatus.CREATED);
}
...
...
@ExceptionHandler
public ResponseEntity handleException(MethodArgumentNotValidException e) {
// (1)
final List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
// (2)
return new ResponseEntity<>(fieldErrors, HttpStatus.BAD_REQUEST);
}
RequestBody에 유효하지 않은 요청 데이터가 포함되어 있어 유효성 검증에 실패하고, MethodArgumentNotValidException이 발생합니다.
MemberController에는 @ExceptionHandler 애너테이션이 추가된 예외 처리 메서드인 handleException()이 있기 때문에 유효성 검증 과정에서 내부적으로 던져진 MethodArgumentNotValidException을 handleException() 메서드가 전달받습니다.
getBindingResult().getFieldErrors(): MethodArgumentNotValidException 객체에서 발생한 에러 정보를 확인
(1)에서 얻은 에러 정보를 (2)에서 ResponseEntity를 통해 Response Body로 전달합니다.
이제 Postman으로 회원 등록 요청을 전송하면 아래와 같은 결과가 나옵니다.

handleException() 메서드에서 유효성 검사 실패에 대한 에러 메시지를 구체적으로 전송해 주기 때문에 클라이언트 입장에서는 이제 어느 곳에 문제가 있는지를 구체적으로 알 수 있게 되었습니다.
하지만 의미를 알 수 없는 정보를 전부 포함한 Response Body 전체 정보를 굳이 다 전달받을 필요는 없이 Request Body의 JSON 프로퍼티 중에서 문제가 된 프로퍼티와 에러 메시지만 전달 받아도 충분합니다.
그러려면 어떻게 해야 할까요?
필요한 에러 정보만 담을 Error Response 클래스를 만든 후 클라이언트 쪽에 전달해주면 됩니다.