void 타입
HomeController.java
// @RequestMapping(value="/goHome0101", method=RequestMethod.GET)
@GetMapping("/goHome0101")
// 속성이 하나인 경우 속성명을 생략할 수 있음
// void타입 : 호출하는 URL과 동일한 뷰 이름을 나타냄
public void home0101() {
log.info("home0101");
//mav.setViewName("goHome0101");
//return "goHome0101";
// /views/goHome0101.jsp
}
goHome0101.jsp
타일즈로 인해 출력됨
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Home0101</h1>
String 타입
HomeController.java
//2. String 타입
//뷰 파일의 경로와 파일 이름을 나타냄
@GetMapping("/goHome0201")
public String home0201() {
log.info("home0201");
// /views/home0201.jsp
return "home0201"; // sub 밑에 있는 파일의 경우 sub/home0201로 기입해도 된다.
}
home0201.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Home0201</h1>
- redirect
HomeController.java
//반환값이 "redirect:"로 시작하면
//리다이렉트(새로운 URL을 재요청) 방식으로 처리함
@GetMapping("/goHome0204")
public String home0204() {
log.info("home0204");
return "redirect:/sub/goHome0205";
}
@GetMapping("/sub/goHome0205")
public String home0205() {
log.info("home0205");
//forwarding :
// "/"로 시작하면 웹 애플리케이션의 컨텍스트 경로에 영향을 받지 않는 절대경로를 의미함
return "/sub/home0205";
}
goHome0205.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>goHome0205</h1>
home0205.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Home0205</h1>
자바빈즈 클래스 타입
HomeController.java
//JSON : JavaScript Object Notation
//3. 자바빈즈 클래스 타입
//JSON 객체 타입의 데이터를 만들어서 반환
//Member타입의 member 객체 -> String(serialize)
@ResponseBody
@GetMapping("/goHome0301")
public Member home0301() {
log.info("home0301");
Member member = new Member();
return member;
}
Member.java
package kr.or.ddit.vo;
import lombok.Data;
//POJO가 약해짐
@Data
public class Member {
private String userId;
private String userName = "hongkd";
private String password = "1234";
}
컬렉션 List 타입
HomeController.java
//4. 컬렉션 List 타입
//JSON 객체 배열 타입의 데이터를 만들어서 반환
//반환값이 컬렉션 List 타입이면 JSON객체 배열 타입으로 자동 변환
@ResponseBody
@GetMapping("/goHome04")
public List<Member> home04(){
List<Member> list = new ArrayList<Member>();
Member member = new Member();
list.add(member);
Member member2 = new Member();
list.add(member2);
return list;
}
Member.java
package kr.or.ddit.vo;
import lombok.Data;
//POJO가 약해짐
@Data
public class Member {
private String userId;
private String userName = "hongkd";
private String password = "1234";
}
컬렉션 Map 타입
Map 형태의 컬렉션 자료를 JSON 객체 타입의 데이터로 만들어서 반환
HomeController.java
/* 5. 컬렉션 Map 타입
JSON : JavaScript Object Notation(문자열)
Map 형태의 컬렉션 자료를 JSON 객체 타입의 데이터로 만들어서 반환
*/
@ResponseBody
@GetMapping("/goHome05")
public Map<String,Member> home05() {
log.info("home05");
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/goHome05.jsp (x)
return map;
}
ResponseEntity<Void> 타입
response 할 때 Http 헤더 정보와 내용을 가공
HomeController.java
/* 6. ResponseEntity<Void> 타입
response 할 때 Http 헤더 정보와 내용을 가공
*/
@ResponseBody
@GetMapping("/goHome06")
public ResponseEntity<Void> home06() {
log.info("home06");
// 응답 데이터가 없음(void)
// Http 상태 코드 : 200(성공)
return new ResponseEntity<Void>(HttpStatus.OK);
}
ResponseEntity<String> 타입
response 할 때 Http 헤더 정보와 문자열 데이터를 전달
HomeController.java
/* 7. ResponseEntity<String> 타입
response 할 때 Http 헤더 정보와 문자열 데이터를 전달
*/
@ResponseBody
@GetMapping("/goHome07")
public ResponseEntity<String> home07() {
log.info("home07");
// return new ResponseEntity<String>("SUCCESS", HttpStatus.BAD_REQUEST); // 에러를 보이지만 bad rquest를 사용할 수 있다.
return new ResponseEntity<String>("SUCCESS", HttpStatus.OK);
}
ResponseEntity<자바빈즈 클래스:VO> 타입
자바빈 규약 : 1.프로퍼티 2.기본생성자 3.getter/setter메서드
response 할 때 Http 헤더 정보와 객체 데이터를 전달
HomeController.java
/* 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");
return new ResponseEntity<Member>(member,HttpStatus.NOT_FOUND);
}
- 응용
HomeController.java
/* 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");
ResponseEntity<Member> entity
= new ResponseEntity<Member>(member,HttpStatus.NOT_FOUND);
if(member.getUserId() == null) {
return new ResponseEntity<Member>(member,HttpStatus.FORBIDDEN);
}else {
return new ResponseEntity<Member>(member,HttpStatus.OK);
}
}
ResponseEntity<List> 타입
response할 때 Http 헤더 정보와 객체 배열 데이터를 전달
HomeController.java
//9. ResponseEntity<List> 타입
//response할 때 Http 헤더 정보와 객체 배열 데이터를 전달
@ResponseBody
@GetMapping("/goHome09")
public ResponseEntity<List<Member>> home09(){
List<Member> list = new ArrayList<Member>();
Member member = new Member();
member.setUserId("a001");
list.add(member);
Member member2 = new Member();
list.add(member2);
return new ResponseEntity<List<Member>>(list,HttpStatus.OK);
}
ResponseEntity<Map> 타입
response할 때 Http헤더 정보와 객체 데이터를 Map 형태로 전달
HomeController.java
/* 10. ResponseEntity<Map> 타입
response할 때 Http헤더 정보와 객체 데이터를 Map 형태로 전달
*/
@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);
}
ResponseEntity<byte[]>타입
response 할 때 Http 헤더 정보와 바이너리(binary)
binary : 2개(0,1) => 사진, 영상, 음성
파일 데이터를 전달하는 용도로 사용
+파일 업로드로 인해 pom.xml에 추가
</dependencies> 바로 위에 추가
추가 후 Run As > Maven build 하여서 BUILD SUCCESS가 뜨는 지 확인
<!-- 파일업로드 시작 -->
<!-- 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>
<!-- 파일업로드 끝 -->
HomeController.java
/* 11. ResponseEntity<byte[]>타입
response 할 때 Http 헤더 정보와 바이너리(binary)
binary : 2개(0,1) => 사진, 영상, 음성
파일 데이터를 전달하는 용도로 사용
*/
@ResponseBody
@GetMapping("/goHome1101")
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");
//png 이미지라는 것을 헤더에 알려줘서 세팅함
headers.setContentType(MediaType.IMAGE_PNG);
//이미지를 읽은 결과 객체를 응답 개체에 할당
//HttpStatus.CREATED : http 응답 상태 코드 201
entity = new ResponseEntity<byte[]>(IOUtils.toByteArray(in),headers,HttpStatus.CREATED);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
in.close();
}
return entity;
}
HomeController.java
@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\\avatar4.png");
headers.setContentType(MediaType.IMAGE_PNG);
//IOUtils : commos-io에서 제공. byte로 관리
//HttpStatus.CREATED : http 응답 상태 코드 201
entity = new ResponseEntity<byte[]>(IOUtils.toByteArray(in),headers,HttpStatus.CREATED);
} catch (FileNotFoundException e) {
e.printStackTrace();
//Bad Request : 400
entity = new ResponseEntity<byte[]>(HttpStatus.BAD_REQUEST);
}finally {
in.close();
}
return entity;
}
'스프링 프레임워크' 카테고리의 다른 글
[스프링 프레임워크] 15장 컨트롤러 요청 처리2(Date 타입 처리, DateTimeFormat 애너테이션) (1) | 2024.05.01 |
---|---|
[스프링 프레임워크] 14장 컨트롤러 요청 처리1(컨트롤러 메서드 매개변수, 요청 처리, 요청 데이터 처리 애너테이션, 요청 처리 자바빈즈) (0) | 2024.05.01 |
[스프링 프레임워크] 12장 book 파일을 ajax로 변경 (0) | 2024.04.30 |
[스프링 프레임워크] 11장 컨트롤러 요청 매핑 (0) | 2024.04.29 |
[스프링 프레임워크] 10장 ckeditor5를 응용한 문의사항 게시판(작성, 리스트 출력) (0) | 2024.04.26 |