본문 바로가기
학습

@RequestBody DTO에 Null 넘어오는 이슈 해결

by 공덕뉸나 2023. 9. 7.

댓글 기능을 개발하다가 DTO에 자꾸 Null이 넘어와서 댓글 등록이나 수정이 안되는 이슈가 발생했다.

@PreAuthorize("hasRole('ROLE_USER')")
@PatchMapping("/{ctId}")
public ApiResult<?> update(@PathVariable("ctId") Long ctId, @LoginUser CustomUserDetails customUserDetails, @RequestBody UpdateCommentRequest request) {
	commentService.updateComment(ctId, customUserDetails.getUserId(), request);
    return success();
}

 

LoginUser 어노테이션을 추가하고 테스트하다 생긴 문제라 혹시 그게 문제인가 하면서 코드를 뜯어봤는데 그건 또 아니었다..

그래서 DTO에 Null만 넘어오는 경우에 대해 여러가지 글을 찾아봤는데 대부분의 글이 필드명의 첫글자가 대문자인 경우였다.

나는 필드명을 소문자로만 정해서 해당하지 않았다,,

 

열심히 구글링을 해본 결과 약간,, 허무한 이유였다.

@LoginUser가 추가되면서 Request body에서 값들을 넘겨주는 방식이 달랐던 것이었다.

 

{
  "customUserDetails": {
    "userId": 0,
    "userRoleList": [
      "ROLE_MASTER"
    ],
    "authorityList": [
      {
        "authority": "string"
      }
    ],
    "userEmail": "string",
    "userPhoneNumber": "string",
    "enabled": true,
    "accountNonExpired": true,
    "credentialsNonExpired": true,
    "accountNonLocked": true,
    "password": "string",
    "authorities": [
      {
        "authority": "string"
      }
    ],
    "username": "string",
    "master": true
  },
  "request": {
    "content": "댓글 달기"
  }
 }

 

Request body에서 이렇게 값을 넘겨주고 있었는데 

 

{
	"content" : "댓글 달기"
}

 

그냥 이렇게만 넘겨주면 되는 것이었다,,

코드를 아무리 뜯어봐도 뭐가 잘못됐는지 모르겠어서 머리 아팠는데 테스트 하면서 넘겨준 방식 때문이었다니..!

그래도 해결해서 다행이다. 

혹시 나랑 똑같은 이유로 헤매고 있는 사람들에게 도움이 되었으면,, 망망~!