반응형
01. @Controller
🖤[Controller] RestfulController.java
- 요청 처리 메소드에서 JSON으로 응답하는 법
package xyz.itwill10.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import xyz.itwill10.dto.Member;
//🌈Restful API 만들기
//REST (Representational State Transfer) :
//=> 자원(Resource)의 표현(Representation)에 의한 상태(State)를 전달(Transfer)하는 것을 의미
// => 페이지 요청에 대한 처리 결과를 클라이언트에게 XML 이나 JSON 형식의 텍스트 데이타로 응답 처리
//Restful API :
// => REST 기능을 사용하여 두 컴퓨터의 시스템이 안전하게 값을 주고 받기 위한 프로그램
// => 스마트 기기의 프로그램(앱) 정보를 전달받아 저장하거나 검색결과를 제공하여 출력하기 위해 사용
// => 정보를 절대 스마트 기기에 저장하지 않고, 가장 중요한 정보만 웹을 통해 필요한 데이타베이스에 저장함
// => 웹프로그램은 사이트 구현 뿐만 아니라 Restful aPI를 구현하기 위해 많이 사용
//=> Spring3 : 웹사이트를 구축하기 위한 목적
//=> Spring4 : Restful aPI 기능을 구축하기 위한 목적
//=> Spring5 : Spring4 + 클라우드 기능을 구축하기 위한 목적
@Controller
public class RestfulController {
[GET] : /rest 요청
@RequestMapping(value = "/rest", method=RequestMethod.GET)
public String rest() {
return "rest/input";
}
[POST] : /rest 요청
/*
//@RequestParam 어노테이션을 사용하여 하나의 전달값을 하나의 매개변수에 저장받아 사용
//=> 주의) 전달값의 이름과 매개변수의 이름은 동일히 작성
@RequestMapping(value = "/rest", method=RequestMethod.POST)
public String rest(@RequestParam String id,@RequestParam String name, Model model) {
//모델객체를 통해 전달값을 속성값으로 저장
model.addAttribute("id",id);
model.addAttribute("name",name);
//반환되는 문자열(viewName)을 이용하여 ViewResolver객체(TilesView)가 뷰로 완성하여 응답 처리
return "rest/output";
}
*/
//@ResponseBody : 요청 처리 메소드의 반환값(문자열)을 리스폰즈 메세지 몸체부(원래는 HTML문서가 저장되어야 하는데, 문자열을 저장함)
//에 저장하여 클라이언트에게 직접 텍스트 데이타로 응답되도록 설정하는 어노테이션
// => 반환되는 문자열을 ViewResolver(TilesView)객체로 뷰로 변환하여 응답하지 않고 Front Controller가 직접 응답 처리
// => 반환되는 문자열을 리스폰즈 메세지 몸체부에 저장하여 응답
// => 주의) Java 객체는 리스폰즈 메세지 몸체부에 저장 불가능하여 응답 불가능 - 즉, 반환값으로 Java 객체 불가능
//@RequestBody : 리퀘스트 메세지 몸체부에 저장된 모든 전달값을 문자열로 제공받기 위한 어노테이션
//=> POST, PUT, PATCH, DELETE 등의 요청방식에 의해 리퀘스트 메세지 몸체부에 저장되어 전달된
//모든 값을 문자열로 제공받아 사용 가능
// => GET 방식은 리퀘스트 메세지 몸체부가 비어있으므로 @RequestBody 어노테이션 사용 불가능
// => 리퀘스트 메세지 몸체부에 저장되어 전달된 값 JSON 형식(application/json)의 값은 매개변수의
//Java 객체로 제공받아 사용 가능 - 전달값은 객체 필드에 저장
// => form 태그의 enctype 속성의 기본값은 "application/x-www-form-urlencoded"인데, "application/json"으로 변경하면 가능하다는 뜻!
// => 일반적으로) JSON 형식으로 전달된 값을 JAVA 객체로 제공받기 위해, 특히 AJAX 시 요청 시에 사용함
// => 즉, 웹프로그램에서는 @RequestParam 이나 @ModelAttribute를 이용함
@RequestMapping(value = "/rest", method=RequestMethod.POST)
@ResponseBody
public String rest(@RequestBody String input) {
return input; //타일 뷰 이용하지 않음(JSP로 응답하지 않는다는 것)
}
/rest_member 요청
//@ResponseBody 어노테이션을 사용하여 요청 처리 메소드의 반환값(Member 객체)을 리즈폰즈 메세지의
//몸체부에 저장하여 텍스트 데이타의 회원정보를 클라이언트에게 전달하여 응답 처리
// => jackson-databind 라이브러리에 의해 Member 객체가 JavaScript Object 객체로 변환되어 응답 처리
//문제점) 리스폰즈 메세지의 몸체부에 Java 객체를 저장 불가능 - 에러 발생(406)
//해결법) 반환되는 Java 객체를 텍스트 데이타(XML 또는 JSON)의 문자열로 자동 변환되도록
//설정하여 응답 처리 가능
// => [jackson-databind] 라이브러리를 프로젝트에 빌드 처리하면 자동으로 Java 객체가 JSON
//형식의 텍스트 데이타로 변환하여 반환
// => [jackson-databind]는 : Java 객체와 JSON 문서 간의 데이터 변환을 지원
// => [jackson-xml-databind]는 : Java 객체와 XML 문서 간의 데이터 변환을 지원 - 수동으로 만들어줘야함 (인터페이스 + XML 파일 만들어 설정 필수), 하지만 JSON은 자동임
@RequestMapping("/rest_member")
@ResponseBody
public Member restMember() {
Member member = new Member();
member.setId("abc123");
member.setPasswd("123456");
member.setName("홍길동");
member.setEmail("abc@itwill.xyz");
return member;
}
/rest_list 요청
//@ResponseBody 어노테이션을 사용하여 요청 처리 메소드의 반환값(List 객체)을 리즈폰즈 메세지의
//몸체부에 저장하여 텍스트 데이타의 회원목록을 클라이언트에게 전달하여 응답 처리
// => jackson-databind 라이브러리에 의해 List 객체가 JavaScript Array 객체로 변환되어 응답 처리
@RequestMapping("/rest_list")
@ResponseBody
public List<Member> restMemberList() {
//원래는 Service 클래스의 메소드를 호출해서 저장하는 것이 정석이지만
//일단 멤버객체 생성해서 만들어봄!
List<Member> memberList = new ArrayList<>();
Member member1 = new Member();
member1.setId("abc123");
member1.setPasswd("123456");
member1.setName("홍길동");
member1.setEmail("abc@itwill.xyz");
memberList.add(member1);
Member member2 = new Member();
member2.setId("xyz789");
member2.setPasswd("456789");
member2.setName("임꺽정");
member2.setEmail("xyz@itwill.xyz");
memberList.add(member2);
return memberList;
}
/rest_map 요청
//AJAX 할 때 처리결과를 일일이 JSON으로 변환하여 사용했지만,
//@ResponseBody 어노테이션과 maven이 제공해주는 jackson-databind 라이브러리를 사용하면
//자동으로 JSON 형식으로 알아서 다 변환해줌
@RequestMapping("/rest_map")
@ResponseBody
public Map<String, Object> restMap() {
//객체가 없는 경우 Map을 이용할 수 있음
Map<String, Object> map = new HashMap<>();
map.put("id", "abc123");
map.put("passwd", "123456");
map.put("name", "홍길동");
map.put("email", "abc@itwill.xyz");
return map;
}
[GET] : /rest/map 요청
@RequestMapping(value = "/rest/map", method=RequestMethod.GET)
public String restInput() {
return "rest/input";
}
[POST] : /rest/map 요청
//모든 전달값을 Map 객체의 엔트리에 저장되어 매개변수로 제공받아 사용 가능
// => 모든 전달값을 Map 객체로 제공받기 위해 반드시 @RequestParam 어노테이션 사용
@RequestMapping(value = "/rest/map", method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> restOuput(@RequestParam Map<String, Object> map) {
return map;
}
}
02. VIEW
💚[JSP] input.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>입력페이지</h1>
<hr>
<form method="post">
<table>
<tr>
<td>아이디</td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td colspan="2"><button type="submit">입력완료</button></td>
</tr>
</table>
</form>
</body>
</html>
💚[JSP] output.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>출력페이지</h1>
<hr>
<p>아이디 = ${id }</p>
<p>이름 = ${name }</p>
</body>
</html>
반응형
'framework > spring mvc 웹사이트제작법' 카테고리의 다른 글
[springMVC웹] 15. 파일 업로드 프로그램 (요청 처리 메소드에서 파일 업로드 처리) (0) | 2024.08.05 |
---|---|
[springMVC웹] 14. REST API 게시판 프로그램 (0) | 2024.08.05 |
[springMVC웹] 12. 암호화처리, 보안처리(권한처리), 예외처리하는 법 (0) | 2024.08.05 |
[springMVC웹]11. 트랜잭션 매니저 이용하는 법 @Transactional (0) | 2024.08.05 |
[springMVC웹] 10. 모듈 테스트하는 법 (@RunWith, @ContextConfiguration, @WebAppConfiguration, @FixMethodOrder) (0) | 2024.08.05 |