300x250
반응형
Conteroller.java
@ResponseBody
@GetMapping(value = "download")
public ResponseEntity<String> download() {
logger.debug("=========== download ===========");
List<User> user = userService.findAll();
HttpHeaders header = new HttpHeaders();
header.add("Content-Type", "text/csv; charset=MS949");
header.add("Content-Disposition", "attachment; filename=\""+"user.csv"+"\"");
return new ResponseEntity<String>(setContent(user), header, HttpStatus.CREATED);
}
프로젝트 전반적인 인코딩은 utf-8이지만 csv 만들때는 MS949를 써야 된다고 한다.
혹시나 싶어 utf-8로 했더니 정말 깨진다....
여기서는 서비스를 이용해 원하는 데이터 리스트를 가져오고 HttpHeader를 설정해준다.
그리고 리턴값으로 setContent() 메서드에 데이터 리스트를 넣어 csv 파일을 만들어준다.
public String setContent(List<User> user) {
String data = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
data += "pid, 이름, 부서, 직위, 데이터기준일 : "+sdf.format(new Date())+"\n";
for (int i=0; i<user.size(); i++) {
data += user.get(i).getUid() + ",";
data += user.get(i).getName() + ",";
data += user.get(i).getDept() + ",";
data += user.get(i).getPos() + "\n";
}
return data;
}
View.jsp
<button onclick="location.href='/download'">csv 다운로드</button>
그리고 뷰에서 버튼을 만들어 컨트롤러에서 지정한 링크를 달면
csv 파일을 다운받을 수 있다.
+ 참고
https://marobiana.tistory.com/25
위 블로그에서는 ResponseBody 어노테이션이 먹지 않아 ResponseEntity 어노테이션을 썼다고 했는데
나는 @ResponseBody로 잘 작동되었다...
혹시 한글이 깨진다면 참조해보자.
300x250
반응형
'IT > 자바, 스프링' 카테고리의 다른 글
jpa 어노테이션 (0) | 2021.02.02 |
---|---|
intellij에서 maven도 안뜨고 run도 안될때 (0) | 2021.01.11 |
jpa 페이지네이션 메서드 (0) | 2019.09.11 |
ORM, JPA, Hibernate (0) | 2019.08.27 |
jdbc 사용 전 준비하기 (0) | 2019.08.12 |