어제에 이어서 계속 해보자
5. 컬렉션 Map 타입
// 5. 컬렉션 Map 타입
// JSON : JavaScript Object Notation(문자열)
// Map 형태의 컬렉션 자료를 JSON 객체 타입의 데이터로 만들어서 반환
@ResponseBody
@GetMapping("/goHome05")
public Map<String, Member> home05(){
log.info("home05");
Member member = new Member();
Member member2 = new Member();
member.setUserId("A001");
member2.setUserId("B001");
Map<String, Member> map = new HashMap<String, Member>();
map.put("key1",member);
map.put("key2",member2);
// View : /views/goHome05.jsp(x)
return map;
}
@ResponseBody 어노테이션이 없으면 @GetMapping의 경로에 있는 jsp를 찾게 된다.
@ResponseBody를 추가해야 페이지로 넘어가지 않고 데이터로써 전송된다.
6. ResponseEntity<Void> 타입
/* 6. ResponseEntity<Void> 타입
response 할 때 Http 헤더 정보와 내용을 가공
*/
@ResponseBody
@GetMapping("/goHome06")
public ResponseEntity<Void> home06(){
log.info("home06");
// 응답 데이터가 없음(void)
// Http 상태 코드 : 200(성공)
return new ResponseEntity<Void>(HttpStatus.OK);
}
/goHome06 요청이 왔을 때 header정보에 HttpStatus.OK(200)을 반환한다.
7. ResponseEntity<String> 타입
/* 7. ResponseEntity<String> 타입
response 할 때 Http 헤더 정보와 문자열 데이터를 전달
Object : 객체(인스턴스) / Entity : 개체
*/
@ResponseBody
@GetMapping("/goHome07")
public ResponseEntity<String> home07(){
log.info("home07");
return new ResponseEntity<String>("success",HttpStatus.OK);
}
/goHome07 요청이 들어오면 SUCCESS라는 문자와 헤더에 HttpStatus가 200이 표시된다.
8. ResponseEntity<자바빈즈 클래스(VO)> 타입
/*
8. ResponseEntity<자바빈즈 클래스:VO> 타입
자바빈 규약 : 1. 프로퍼티, 2. 기본생성자, 3. getter/setter 메소드
response 할 떄 http 헤더 정보와 객체 데이터를 전달
*/
@ResponseBody
@GetMapping("/goHome08")
public ResponseEntity<Member> home08(){
log.info("home08");
Member member = new Member();
member.setUserId("A001");
if(member.getUserId() == null) {
return new ResponseEntity<Member>(member,HttpStatus.FORBIDDEN);
} else {
return new ResponseEntity<Member>(member,HttpStatus.OK);
}
}
/goHome08이 요청됐을 때 member 데이터가 null값이면 헤더에 FOBIDDEN(403)를 표시하고,
member 데이터가 null값이 아닐 때 OK(200)을 표시한다.
9. ResponseEntity<List> 타입
//9. ResponseEntity<List> 타입
//response할 때 Http 헤더 정보와
// 객체 배열 데이터를 전달
@ResponseBody
@GetMapping("/goHome09")
public ResponseEntity<List<Member>> home09(){
List<Member> list = new ArrayList<Member>();
Member member = new Member();
list.add(member);
Member member2 = new Member();
list.add(member2);
return new ResponseEntity<List<Member>>(list,HttpStatus.OK);
}
Member타입의 List를 반환하고 헤더에 OK(200)을 표시한다.
10. Response Map 타입
/* 10. Response Map 타입
JSON : JavaScript Object Notation(문자열)
Map 형태의 컬렉션 자료를 JSON 객체 타입의 데이터로
만들어서 반환
*/
@ResponseBody
@GetMapping("/goHome10")
public ResponseEntity<Map<String, Member>> home10(){
log.info("home10");
Map<String, Member> map
= new HashMap<String, Member>();
Member member = new Member();
member.setUserId("a001");
Member member2 = new Member();
member2.setUserId("b001");
map.put("key1", member);
map.put("key2", member2);
// View : /views/goHome10.jsp (x)
return new ResponseEntity<Map<String, Member>>(map, HttpStatus.OK);
}
11. ResponseEntity<byte[]> 타입
파일 업로드를 위한 타입
우선 이걸 사용하기 위해선 pom.xml에 common-fileupload 라이브러리가 필요함
더보기
<!-- 파일업로드 시작 -->
<!-- common-fileupload 라이브러리는 tomcat7.0버전 이후로는
서블릿3.0이상에서 지원함
-->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- 파일을 처리하기 위한 의존 라이브러리 -->
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<!-- 썸네일 -->
<!-- https://mvnrepository.com/artifact/org.imgscalr/imgscalr-lib -->
<dependency>
<groupId>org.imgscalr</groupId>
<artifactId>imgscalr-lib</artifactId>
<version>4.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
<!-- 파일업로드 끝 -->
pom.xml 안에 dependencies 태그 안쪽에 적어준다.
※ pom.xml이 수정되면 maven build 실행하기 - BUILD SUCCESS가 떠야함
/*
11. ResponseEntity<byte[]> 타입
response 할 때 Http 헤더 정보와 바이너리 (binary)
binary : 2개 (0,1) => 사진, 영상, 음성
파일 데이터를 전달하는 용도로 사용
*/
public ResponseEntity<byte[]> home1101() throws IOException{
log.info("home1101");
// 00111011110011..
InputStream in = null;
// 응답 객체
ResponseEntity<byte[]> entity = null;
HttpHeaders headers = new HttpHeaders();
try {
// 스프링 생성 시 만들어진 기본 이미지 파일
// 이미지 리더로 읽는다.
in = new FileInputStream("C:\\eGovFrameDev-3.10.0-64bit\\workspace\\springProj\\src\\main\\webapp\\resources\\img\\avatar4.png");
headers.setContentType(MediaType.IMAGE_PNG);
// 이미지를 읽은 결과 객체를 응답 개체에 할당
entity= new ResponseEntity<byte[]>(IOUtils.toByteArray(in),headers,HttpStatus.CREATED);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
in.close();
}
return entity;
}
※ import 주의! 이름이 겹치는게 많아서 잘 보고 해야한다.
더보기
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import org.springframework.http.MediaType;
※ 혹시나 IOUtils 임포트가 위와 같이 되지 않는다면 아까 pom.xml을 제대로 수정했는지(저장, maven build) 확인해보자
또 다른 예시
@ResponseBody
@GetMapping("/goHome1102")
public ResponseEntity<byte[]> home1102() throws IOException{
log.info("home1102");
//Stream : 파일을 읽거나 쓸 때, 네트워크 소켓을 거쳐 통신할 때 쓰이는 추상적인 개념
// 데이터가 전송되는 통로
//InputStream : 추상 클래스. 데이터가 들어오는 통로의 역할에 관해 규정하고 있음
// 1) 데이터를 읽어야 함 2) 남은 데이터 확인 3) 데이터 skip 가능 4) close가능(통로 제거)
// 5) 특정 시점부터 다시 읽을 수 있음
// 초기화
InputStream in = null;
ResponseEntity<byte[]> entity = null;
HttpHeaders headers = new HttpHeaders();
try {
in = new FileInputStream("C:\\eGovFrameDev-3.10.0-64bit\\workspace\\springProj\\src\\main\\webapp\\resources\\img\\avatar5.png");
headers.setContentType(MediaType.IMAGE_PNG);
// IOUtils : commons-io
// HttpStatus.CREATED : HTTP 상태 201
entity = new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED);
} catch (FileNotFoundException e) {
e.printStackTrace();
entity = new ResponseEntity<byte[]>(HttpStatus.BAD_REQUEST);
} finally {
in.close();
}
return entity;
}
'Spring 실습' 카테고리의 다른 글
Spring 실습 9일차(SQL 내 여러 테이블에 데이터 넣기) (0) | 2024.05.02 |
---|---|
Spring 실습 8일차 (요청 처리) (0) | 2024.05.01 |
Spring 실습 7일차(응답(Response))(1) (0) | 2024.04.30 |
Spring 실습 6일차(ajax를 활용한 Create, Update, Delete) (0) | 2024.04.29 |
Spring 실습 5일차(Tiles) (1) | 2024.04.26 |