// RestController 사용하기
1. TestController
package com.myspring.pro29.ex01;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
@RestController
@RequestMapping("/test/*")
public class TestController {
static Logger logger = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/hello")
public String hello() {
return "Hello REST!!";
}
@RequestMapping("/member")
public MemberVO member() {
MemberVO vo = new MemberVO();
vo.setId("hong");
vo.setPwd("1234");
vo.setName("홍길동");
vo.setEmail("hong@test.com");
return vo;
}
@RequestMapping("/membersList")
public List<MemberVO> listMembers () {
List<MemberVO> list = new ArrayList<MemberVO>();
for (int i = 0; i < 10; i++) {
MemberVO vo = new MemberVO();
vo.setId("hong"+i);
vo.setPwd("123"+i);
vo.setName("홍길동"+i);
vo.setEmail("hong"+i+"@test.com");
list.add(vo);
}
return list;
}
@RequestMapping("/membersMap")
public Map<Integer, MemberVO> membersMap() {
Map<Integer, MemberVO> map = new HashMap<Integer, MemberVO>();
for (int i = 0; i < 10; i++) {
MemberVO vo = new MemberVO();
vo.setId("hong" + i);
vo.setPwd("123"+i);
vo.setName("홍길동" + i);
vo.setEmail("hong"+i+"@test.com");
map.put(i, vo);
}
return map;
}
@RequestMapping(value= "/notice/{num}" , method = RequestMethod.GET)
public int notice(@PathVariable("num") int num ) throws Exception {
return num;
}
@RequestMapping(value= "/info", method = RequestMethod.POST)
public void modify(@RequestBody MemberVO vo ){
logger.info(vo.toString());
}
// ResponseEntity 사용하기
@RequestMapping("/membersList2")
public ResponseEntity<List<MemberVO>> listMembers2() {
List<MemberVO> list = new ArrayList<MemberVO>();
for (int i = 0; i < 10; i++) {
MemberVO vo = new MemberVO();
vo.setId("lee" + i);
vo.setPwd("123"+i);
vo.setName("이순신" + i);
vo.setEmail("lee"+i+"@test.com");
list.add(vo);
}
return new ResponseEntity(list,HttpStatus.INTERNAL_SERVER_ERROR);
}
// ResponseEntity 사용하기
@RequestMapping(value = "/res3")
public ResponseEntity res3() {
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type", "text/html; charset=utf-8");
String message = "<script>";
message += " alert('새 회원을 등록합니다.');";
message += " location.href='/pro29/test/membersList2'; ";
message += " </script>";
return new ResponseEntity(message, responseHeaders, HttpStatus.CREATED);
}
}
2. MemberVO
package com.myspring.pro29.ex01;
public class MemberVO {
private String id;
private String pwd;
private String name;
private String email;
public MemberVO() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
String info = id+", "+ pwd+", "+ name+", "+ email;
return info;
}
}
결과가 viewResolver로 안감
VO객체전달하기 : test/member
컬렉션객체전달하기 : test/membersList
Map 객체전달하기 : test/membersMap
PathVariable 사용하기 : test/notice/* : *에 들어간 값이 view로 리턴
--------------------------
// ResponseBody 사용하기
1. HomeController
package com.myspring.pro29;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/*
*//**
* Simply selects the home view to render by returning its name.
*//*
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
return "JSONTest2";
}
}
2. JSONTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<!DOCTYPE html>
<html>
<head>
<title>JSONTest</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(function() {
$("#checkJson").click(function() {
var member = { id:"park",
name:"박지성",
pwd:"1234",
email:"park@test.com" };
$.ajax({
type:"post",
url:"${contextPath}/test/info",
contentType: "application/json",
data :JSON.stringify(member),
success:function (data,textStatus){
},
error:function(data,textStatus){
alert("에러가 발생했습니다.");
},
complete:function(data,textStatus){
}
}); //end ajax
});
});
</script>
</head>
<body>
<input type="button" id="checkJson" value="회원 정보 보내기"/><br><br>
<div id="output"></div>
</body>
</html>
------------------------------------
// ResponseBody 사용하기
1. ResController
package com.myspring.pro29.ex02;
import java.util.HashMap;
import java.util.Map;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class ResController {
@RequestMapping(value = "/res1")
@ResponseBody
public Map<String, Object> res1() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "hong");
map.put("name", "È«±æµ¿");
return map;
}
@RequestMapping(value = "/res2")
public ModelAndView res2() {
return new ModelAndView("home");
}
}
--------------------------------
// 스프링 REST 방식으로 URI표현하기
1. BoardController
package com.myspring.pro29.ex03;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
@RestController
@RequestMapping("/boards")
public class BoardController {
static Logger logger = LoggerFactory.getLogger(BoardController.class);
@RequestMapping(value = "/all", method = RequestMethod.GET)
public ResponseEntity<List<ArticleVO>> listArticles() {
logger.info("listArticles 메서드 호출");
List<ArticleVO> list = new ArrayList<ArticleVO>();
for (int i = 0; i < 10; i++) {
ArticleVO vo = new ArticleVO();
vo.setArticleNO(i);
vo.setWriter("이순신"+i);
vo.setTitle("안녕하세요"+i);
vo.setContent("새 상품을 소개합니다."+i);
list.add(vo);
}
return new ResponseEntity(list,HttpStatus.OK);
}
@RequestMapping(value = "/{articleNO}", method = RequestMethod.GET)
public ResponseEntity<ArticleVO> findArticle (@PathVariable("articleNO") Integer articleNO) {
logger.info("findArticle 메서드 호출");
ArticleVO vo = new ArticleVO();
vo.setArticleNO(articleNO);
vo.setWriter("홍길동");
vo.setTitle("안녕하세요");
vo.setContent("홍길동 글입니다");
return new ResponseEntity(vo,HttpStatus.OK);
}
@RequestMapping(value = "", method = RequestMethod.POST)
public ResponseEntity<String> addArticle (@RequestBody ArticleVO articleVO) {
ResponseEntity<String> resEntity = null;
try {
logger.info("addArticle 메서드 호출");
logger.info(articleVO.toString());
resEntity =new ResponseEntity("ADD_SUCCEEDED",HttpStatus.OK);
}catch(Exception e) {
resEntity = new ResponseEntity(e.getMessage(),HttpStatus.BAD_REQUEST);
}
return resEntity;
}
//수정하기
@RequestMapping(value = "/{articleNO}", method = RequestMethod.PUT)
public ResponseEntity<String> modArticle (@PathVariable("articleNO") Integer articleNO, @RequestBody ArticleVO articleVO) {
ResponseEntity<String> resEntity = null;
try {
logger.info("modArticle 메서드 호출");
logger.info(articleVO.toString());
resEntity =new ResponseEntity("MOD_SUCCEEDED",HttpStatus.OK);
}catch(Exception e) {
resEntity = new ResponseEntity(e.getMessage(),HttpStatus.BAD_REQUEST);
}
return resEntity;
}
//삭제하기
@RequestMapping(value = "/{articleNO}", method = RequestMethod.DELETE)
public ResponseEntity<String> removeArticle (@PathVariable("articleNO") Integer articleNO) {
ResponseEntity<String> resEntity = null;
try {
logger.info("removeArticle 메서드 호출");
logger.info(articleNO.toString());
resEntity =new ResponseEntity("REMOVE_SUCCEEDED",HttpStatus.OK);
}catch(Exception e) {
resEntity = new ResponseEntity(e.getMessage(),HttpStatus.BAD_REQUEST);
}
return resEntity;
}
}
2. JSONTest2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<!DOCTYPE html>
<html>
<head>
<title>JSONTest2</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(function() {
$("#checkJson").click(function() {
var article = {articleNO:"114",
writer:"박지성",
title:"안녕하세요",
content:"상품 소개 글입니다."
};
$.ajax({
//type:"POST",
//url:"${contextPath}/boards", // 새 글을 등록하는 메소드를 호출.
type:"PUT",
url:"${contextPath}/boards/114", // 글번호 114번에 대해 수정을 요청.
contentType: "application/json",
data :JSON.stringify(article), // 글 정보를 JSON 형식으로 전송.
success:function (data,textStatus){
alert(data);
},
error:function(data,textStatus){
alert("에러가 발생했습니다.");ㅣ
},
complete:function(data,textStatus){
}
}); //end ajax
});
});
</script>
</head>
<body>
<input type="button" id="checkJson" value="새글 쓰기"/><br><br>
<div id="output"></div>
</body>
</html>
3. AricleVO
package com.myspring.pro29.ex03;
public class ArticleVO {
private int articleNO;
private String writer;
private String title;
private String content;
public int getArticleNO() {
return articleNO;
}
public void setArticleNO(int articleNO) {
this.articleNO = articleNO;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
String info = "";
info += "\n"+articleNO+"\n "
+writer+"\n"
+title+"\n"
+content;
return info;
}
}
'Bitcamp > BITCAMP - Spring FW' 카테고리의 다른 글
Maven Project War파일 만들기 ~ 개발서버 배포 (0) | 2020.06.29 |
---|---|
7일차 (0) | 2019.10.15 |
6일차 (0) | 2019.10.11 |
5일차 (0) | 2019.10.10 |
4일차 (0) | 2019.10.08 |