Java/Spring

[Spring] getParameter 메소드

LimeCoding 2023. 11. 14. 00:29

파일 처리와 관련된 공부를 하다가 getParameter 메소드에 대한 궁금증이 생겼다.

 

먼저 필자가 알고 있던 내용은 다음과 같다.

  1. getParameter 메소드는 Http 요청이 왔을 때, parameter의 값을 얻을 수 있는 메소드이다.
  2. 파라미터는 get 요청에서는 www.example.com?name=limecoding에서  서 name=limecoding에 해당하고
    post 요청에서는 body안에 name=limecoding을 말한다.
  3. request.getParameter(파라미터 이름)과 같은 형식으로 사용할 수 있다.

 

그런데 파일 전송을 하다보면 multipart-formdata를 사용하는데 이때 형식은 다음과 같은 형태이다.

multipart-formdata의 body

 

바디 부분을 보면 ------WebKitFormBoundary와 같이 각 파트를 바운더리를 통해 나누고 있다. 이런 상태에서 getParameter(" itemName ") 요청을 하면 " Spring "이라는 문자열을 리턴해준다. 기존에 알고 있던 parameter 형식의 데이터를 파싱한다는 정보와 상충되어 약간 실험을 해봤다.

 

먼저 가정은 다음과 같다.

"만약 파싱을 할 때 name="itemName"을 통해 파싱을 시도한다면 밑에 있는 file도 깨진 형태의 문자열로 파싱하지 않을까?"

시도해본 결과 null이 나왔다. 이는 뭔가 구분을 하고 있다는 의미이다. 일단 생각한 내용은 아니다. 그래서 조금 더 찾아보았다.

요청 결과

 

파일 파라미터만 요청했을 때

 

해당 요청시 request에 들어오는 클래스의 정보는 StandardMultipartHttpServletRequest였고 이 객체는 ServletRequest를 부모를 통해 구현하고 있었다. StandardMultipartHttpServletRequest 설명에서도 특별한 처리없이 원래 request의 getParameter를 사용할 수 있다고 나와있다. 아마 이것이 getParameter를 가능하게 하는 것 같다. 어떤 형태로 파싱하는지는 알 수없었다. 이 부분에 대해서는 조금 더 찾아봐야겠다.

 

StandardMultipartHttpServletRequest

 

 

조금 더 공부해야 할 점

1. HttpServletRequest -> 여기서 나오는 native request가 HttpServletRequest라는 걸 알았는데 정확하게는 알지 못한다.

2. 요청 정보가 흘러가는 과정 -> 대략은 알고 있는데 정확하게 알아야겠다.