DB에서 받아온 데이터를 웹페이지에서 CSV 파일로 다운받게 하기.
아래는 한글 깨지는것도 처리 해놓은 방법임!
이렇게하면 CSV파일을 어딘가에 저장하지 않고도 바로 다운로드 할 수 있음.
옛~날에 PHP로 해봤으면서 왜 자바에서는 흐름도 못잡고 몇일을 삽질 했을까ㅠㅠㅠㅠㅠ
1. HTML 페이지에서 다운로드 링크를 건다.
<a href="total">엑셀파일다운로드</a> |
2. Controller (Action)
1번에서 링크 클릭하면 타고 들어오는 액션..
@RequestMapping("/total") 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"; 으로 만들면 된다.
가 |
나 |
다 |
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로 했다는거~
'개발 > Spring' 카테고리의 다른 글
Custom annotation 만들기 (Spirng AOP 이용) (0) | 2013.04.09 |
---|---|
특정 날짜 하루에 해당하는 데이터를 찾을 때 (0) | 2013.02.15 |
프로젝트의 모든 URI 가져오기 (0) | 2012.09.04 |
java에서 properties 파일 읽어 사용하기 (0) | 2012.08.29 |
Cookie에 값이 안들어가지는 것 (2) | 2012.08.28 |