파일 처리와 관련된 공부를 하다가 getParameter 메소드에 대한 궁금증이 생겼다.
먼저 필자가 알고 있던 내용은 다음과 같다.
- getParameter 메소드는 Http 요청이 왔을 때, parameter의 값을 얻을 수 있는 메소드이다.
- 파라미터는 get 요청에서는 www.example.com?name=limecoding에서 서 name=limecoding에 해당하고
post 요청에서는 body안에 name=limecoding을 말한다. - request.getParameter(파라미터 이름)과 같은 형식으로 사용할 수 있다.
그런데 파일 전송을 하다보면 multipart-formdata를 사용하는데 이때 형식은 다음과 같은 형태이다.
바디 부분을 보면 ------WebKitFormBoundary와 같이 각 파트를 바운더리를 통해 나누고 있다. 이런 상태에서 getParameter(" itemName ") 요청을 하면 " Spring "이라는 문자열을 리턴해준다. 기존에 알고 있던 parameter 형식의 데이터를 파싱한다는 정보와 상충되어 약간 실험을 해봤다.
먼저 가정은 다음과 같다.
"만약 파싱을 할 때 name="itemName"을 통해 파싱을 시도한다면 밑에 있는 file도 깨진 형태의 문자열로 파싱하지 않을까?"
시도해본 결과 null이 나왔다. 이는 뭔가 구분을 하고 있다는 의미이다. 일단 생각한 내용은 아니다. 그래서 조금 더 찾아보았다.
해당 요청시 request에 들어오는 클래스의 정보는 StandardMultipartHttpServletRequest였고 이 객체는 ServletRequest를 부모를 통해 구현하고 있었다. StandardMultipartHttpServletRequest 설명에서도 특별한 처리없이 원래 request의 getParameter를 사용할 수 있다고 나와있다. 아마 이것이 getParameter를 가능하게 하는 것 같다. 어떤 형태로 파싱하는지는 알 수없었다. 이 부분에 대해서는 조금 더 찾아봐야겠다.
조금 더 공부해야 할 점
1. HttpServletRequest -> 여기서 나오는 native request가 HttpServletRequest라는 걸 알았는데 정확하게는 알지 못한다.
2. 요청 정보가 흘러가는 과정 -> 대략은 알고 있는데 정확하게 알아야겠다.
'Java > Spring' 카테고리의 다른 글
[Spring] 스프링 부트 3.x에서 querydsl 사용하기(Intellij) (0) | 2023.12.01 |
---|---|
테스트 코드에서 로그를 찍어보자! (0) | 2023.12.01 |
[Thymeleaf] 타임리프 header와 footer 관리하기 (0) | 2023.09.12 |
o.s.b.d.LoggingFailureAnalysisReporter 에러 해결 (0) | 2023.09.01 |
[Spring] Controller와 RestController의 차이 (0) | 2023.08.17 |