본문 바로가기

개발중/troubleshooting

[@ResponseBody] POST method Param 을 DTO 로 받기 ?

728x90
반응형

Api Parameter 를 전달 받는 상황에서 생긴 문제에 대해 기록.

 

Post Method 로 Parameter 를 받을 때는 여러가지 방법이 있다.

회사에서 주로 사용하는 방법은 하나씩 @ApiParam 으로 매핑하는 방식이었다.

 

@ApiParam( name = "content", type = "String", required = true)

@RequestParam("content") String content

 

export function wordQuestionInsert(param) {

  return request({

    url : '/word-questions'

    , method : 'post'

    , params : {

      wID       : param.wID

      , lID     : param.lID

      , answer  : param.answer   || ''

      , content : param.content || ''

    }

  })

}

 


 

따자를 진행하며 팀원과 맞춘 컨벤션은 @ApiParam 이 아닌

@ResponseBody 를 이용해서 DTO 구조로 Parameter 를 전달 받기로 했다.

 


 

400 에러 땡 ❌

 

ResponseBody를 사용해서 전달받으니까 400 에러가 발생.

 

400 Bad Request 오류는 HTTP 상태 코드로 웹 사이트 서버에 보낸 요청 (종종 웹 페이지로드 요청과 같은 간단한 요청)이 어떻게 든 잘못되었거나 손상되어 서버가이를 이해하지 못했음을 의미합니다.


 

ResponseBody 는 json 형태로 전달 받는게 아닌가 싶어서

아래처럼 JSON.stringify 로 변경을 해보더니

아까는 view 에서 400 에러를 부르면서 API 에는 접근도 못하더니 이번에는 API 에 접근은 했다.

 

 

export function wordQuestionInsert(param) {

  var parameter = JSON.stringify(

    {

      'wID'       : param.wID

      , 'lID'     : param.lID

      , 'answer'  : param.answer

      , 'content' : param.content

  });

 

  return request({

    url  : '/word-questions'

    , method      : 'post'

    , contentType : 'application/json;charset=UTF-8'

    , dataType    : 'json'

    , params      : parameter

  })

}


 

PARAMETER 도 잘 넘어가는 것을 확인했는데 잘 넘어가지 않았다 (/▽\)

 


 

Data Type 을 form 으로 바꿔서 시도 땡 ❌

 

export function wordQuestionInsert(param) {

 

  const frm = new FormData()

  frm.append('wID'param.wID)

  frm.append('lID'param.lID)

  frm.append('answer'param.answer)

  frm.append('content'param.content)

 

  return request({

    url  : '/word-questions'

    , method      : 'post'

    , headers: {

      'Content-Type': 'application/json;charset=UTF-8'

    }

    , params      : frm

  })

}

 


 

🔰 해결 🔰

 

내가 예상했던 방법은 view 에서 설정을 잘못해주었다고 생각했었다.

그게 아니라 @ResponseBody 를 파라메터 앞에 쓰니까 Location 에러가 나는 것을 보고 나는 @ResponseBody 의 자리를 ... 새삼 깨달았다. ㅎ Code 마다 @ResponseBody 의 위치가 다르던데 조금 더 찾아봐야 겠다. 

 

 


 

728x90
반응형