개발/Spring

Java에서 CSV 파일 생성,다운로드. 한글 인코딩~

신매력 2012. 9. 12. 14:12

DB에서 받아온 데이터를 웹페이지에서 CSV 파일로 다운받게 하기.

아래는 한글 깨지는것도 처리 해놓은 방법임!


이렇게하면 CSV파일을 어딘가에 저장하지 않고도 바로 다운로드 할 수 있음.



옛~날에 PHP로 해봤으면서 왜 자바에서는 흐름도 못잡고 몇일을 삽질 했을까ㅠㅠㅠㅠㅠ




1. HTML 페이지에서 다운로드 링크를 건다.


<a href="total">엑셀파일다운로드</a> 



2. Controller (Action)


1번에서 링크 클릭하면 타고 들어오는 액션..


@RequestMapping("/total")
public ResponseEntity<String> getTotalList() {


   List<Total> totalList =  totalService.getTotal(); // DB에서 가져온 데이터리스트


   HttpHeaders header = new HttpHeaders();

   header.add("Content-Type", "text/csv; charset=MS949");

   header.add("Content-Disposition", "attachment; filename=\"" + "total.csv" + "\"");


   return new ResponseEntity<String>(setContent(totalList), header, HttpStatus.CREATED);


@ResponseBody 어노테이션 쓰고 한글 리턴했더니 글자가 ?? 이렇게 나옴


http://dptablo.tistory.com/188  <- 이 블로그 보고 알았는데... 

@ResponseBody 대신 ResponseEntity로 하니까 된다.


CSV는 UTF-8로 하면 깨지고, MS949 로 세팅해야 된다.


setContent있는 부분에는 스트링 데이터를 넣는다. 3번 참고.



3. setContent()에서 CSV 파일에 들어갈 내용 만들기


CSV는 , 와 개행문자로 구분 된다.


아래와 같은 CSV를 만들고 싶다면,


String data = "가, 나, 다, \n 1, 2, 3"; 으로 만들면 된다.


가 

나 

다 



4. 인코딩 문제 해결을 위한 설정


아래 설정을 context 설정 파일에 세팅한다.


<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

   <property name="messageConverters">

       <list>

          <bean class="org.springframework.http.converter.StringHttpMessageConverter">

              <property name="supportedMediaTypes">

                  <value>text/plain;charset=UTF-8</value>

              </property>

          </bean>

       </list>

   </property>

</bean>


참고로 프로젝트 전체가 UTF-8로 맞춰져 있었고 CSV 내려줄때만 인코딩을 MS949로 했다는거~