개발괘발
339
2019-06-27 10:04:32
9
695

HttpServletRequest 안에있는 정보들을 Map담을 수 있나요??


스프링 사용중입니다.

파일업로드 중에 Contoller단에서 HttpServletRequest객체를 받아서 service로 request객체를 보내서 service에서 파일업로드로직 처리를 합니다. 그런데 HttpServletRequest객체는 웹전용이라 service에서는 웹관련 파라미터를 사용하지 말라고하는데 그러면 Controller에서 모든걸 처리해야하나요?? 아니면 request객체 안에 있는 파라미터 정보들을 map으로 빼서 service로 전달해야하나요? 

문제는 파라미터중에 multipart파일로 전송되어오는 정보들을 어떻게 map에 담아서 보내냐는 겁니다..

해결법좀 알려주실분 계신가요 ㅠㅠㅠㅠ

그냥 Controller에서 모든걸 처리해버리고 싶네요...

0
  • 답변 9

  • Frudy
    7k
    2019-06-27 10:07:14 작성 2019-06-27 10:09:02 수정됨

    그런데 HttpServletRequest객체는 웹전용이라 service에서는 웹관련 파라미터를 사용하지 말라고하는데

    출처가 어떻게되나요?


    물론 Request객체가 생각보다 커서..

    단순히 view에서 보내온 값만 필요하다면

    request.getParameterMap()으로 Map만 보내서 할수는있어요.

  • EastGlow
    1k
    2019-06-27 10:09:35

    첨부파일로 넘어온 multipartfile 객체를 애초에 컨트롤러 단에서 맵에 담아 그 맵을 service로 넘기면 되지 않을까요?

  • 개발괘발
    339
    2019-06-27 10:10:10

    그 저희가 만드는 프로젝트가 웹뿐만아니라 어떤 환경에서도 호응할 수 있게 만드는 거라고 부장님이 그러셔

    서 자꾸 바꾸라고하네요.. 저도 단순한 파라미터들이면 map으로 바꿔서 넘기겠는데 파일객체들은 도저히 

    어떻게 넘겨야할지 감이 안오네요.. 그냥 controller에서 파일업로드 처리하면 안되나요??

  • Frudy
    7k
    2019-06-27 10:11:32

    프로젝트가 웹뿐만아니라 어떤 환경에서도 호응할 수 있게

    아...제 생각이 짧았네요.


    이후 달리는 답변보고 저도 배우겠습니다.

  • humorist
    148
    2019-06-27 10:11:56 작성 2019-06-27 10:13:21 수정됨

    @RequestParam

    이용해서 parameter를 map이나 multipart로 받음 될거같네요

    그후에 service로 전달하세요~

  • 개발괘발
    339
    2019-06-27 10:13:42

    EastGlow

    컨트롤러에서 HttpServletRequest request 파라미터로 받는데

    multipartfile 객체를 map에 담으려면

    MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest)request;

    Iterator<String> iterator = mRequest.getFileNames();

    MultipartFile multipartFile = null;

    while(iterator.hasNext()) {

            int i = 0;

    multipartFile = mRequest.getFile(iterator.next());

            map.put("mFile" + i, multipartFile);

            i++;

    }

    이렇게 받아서 서비스로 맵을 넘겨야하나요??


  • 개발괘발
    339
    2019-06-27 10:27:08

    humorist

    @RequestParam ("file") MultipartFile file 이런식으로 받게되면

    만약 파일이 10개정도의 다중업로드는 일일이 처리해줘야하나요??

    아니면 map을 사용해서 @ReqeustParam HashMap<String, Obeject> paramMap

    이렇게 받을경우 파일들은 paramMap.get("filename") 이런식으로 꺼낼수 있는건가요?

  • humorist
    148
    2019-06-27 10:49:13

    @RequestParam("files") MultipartFile[] files, @RequestParam HashMap<Strnig, Object> paramMap

    paramsMap.put("files", files);

    다중업로드일 경우에는  MultipartFile[] 를 이용하시면 될거같구요

    service에 넘기는 목적라면 파일 객체 자체를 map에 담아서 service에 넘긴후에

    service에서 file 객체로 형변환 시켜서 작업하는게 낫지 않을까요

    밑에 쓰신 paramMap.get("filename")은 되는지 안되는지는 잘 모르겠네요







  • EastGlow
    1k
    2019-06-27 12:01:15

    제일 좋은 방법은 폼으로 넘어오는 값들을 받을 수 있는 객체에 매핑시켜서 서비스단으로 던지는게 좋을 듯 합니다. 예를 들어 VO객체에 MultipartFile을 받을 수 잇는 필드를 하나 선언해두고 input file의 name에 이 필드명을 입력해두시면 자동으로 매핑되는...

  • 로그인을 하시면 답변을 등록할 수 있습니다.