Spring Boot 학습 중 마주한 이슈 - Message Converter

묘한묘랑·2023년 8월 20일
0

ShoppingMall

목록 보기
6/7

이번 글은 Spring Boot 학습 중 마주한 이슈에 대하여 적어보려 한다.

일단 이 에러를 마주한 것은 Controller를 테스트 할 때 발생한 것인데, 분명 디버깅을 통해 값이 정확하게 들어간 것을 확인했음에도 불구하고 Client에서 빈 객체를 받는 현상을 마주하였다.

제목에 적은대로 Message Converter에 대하여 잘 모른 상태로 사용하였기에 마주한 이슈였다.

{
	"role": {},
	"nickName": {},
	"pw": {},
	"id": {}
}

이것이 Api를 호출 했을 때 받게 된 값이었다.

그리고 이것이 그 코드

  @ExceptionHandler(MethodArgumentNotValidException.class)
  ResponseEntity<Map<String, ValidErrorObj>> validateError(MethodArgumentNotValidException e){
    Map<String, ValidErrorObj> resultMap = new HashMap<>();

    for(FieldError error : e.getBindingResult().getFieldErrors()){
      String field = error.getField();
      if(field.equals("role")) { // 다른 것도 처리하고 싶다면 || 을 사용하기
        resultMap.put(field, validErrorObj.createValidError(field, error.getDefaultMessage(), false));
        continue;
      }
      resultMap.put(error.getField(), validErrorObj.createValidError(field, error.getDefaultMessage(), true));
    }

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

일단 이 문제가 무엇이 까다로웠느냐 묻는다면 나는 이렇게 답할 것이다.

에러가 발생하지 않았는데 에러가 났어요!!!!! 왜!!!!!!!!!!!!!!

분명 값도 잘 들어 갔으며 조회 하는 코드를 작성해 적어 보아도 모두 값을 정상적으로 가지고 있었다.

그래서 일단 내가 가장 먼저 했던 것은 현재 Insomnia Tool을 사용하던 중이었기에 이것에서만 발생하는 건지 확인을 위하여 vsCode에 있는 확장프로그램인 Thunder Client를 사용하여 확인을 해보았다.

결과는 똑같았다.

그래서 일단 전달 과정에 대하여 한 번 생각해보았다.

값이 들어가는 것 까지는 확인 하였기에 그 이후에 무슨 작업을 할지 생각을 해보자 문뜩 든 생각과, 전에 읽었던 글이 머릿속을 스쳐갔다.

Json으로 어떻게 변경되는거지.....?

| getter | 분명 getter를 기반으로 작동하는 코드가 존재한다는 글을 읽은 기억이 있었다.

이 코드에 대한 것이었는가는 확신이 없었지만 밑져야 본전 아닌가, 바로 getter를 넣어 확인 해보았다.

정상작동 하였다.

Message Converter에 대한 이해만 있었어도 발생하지 않았을 것이었기에 허무하기도 하면서 알아갈 기회가 찾아왔다는 사실에 약간 만족하기도 했다.

결론 - 알고쓰자.

profile
상황에 맞는 기술을 떠올리고 사용할 수 있는 개발자가 되고 싶은 개발자

0개의 댓글