pom.xml
버전 변경
controller/SampleRestController 생성
doA/doB
//@RestController => 해당 클래스를 REST방식 데이터 처리를 수행하는 클래스 선언
//=> @ResponseBody 자동 적용
@RestController
@RequestMapping(value = "/sample")
public class SampleRestController {
private static final Logger logger = LoggerFactory.getLogger(SampleRestController.class);
//http://localhost:8088/sample/doA
/*@ResponseBody*/
@RequestMapping(value = "/doA", method = RequestMethod.GET)
public /*@ResponseBody*/ String doA() {
logger.debug("doA() 호출");
//문자 데이터를 리턴
return "ITWILL";
}
//http://localhost:8088/sample/doB
@RequestMapping(value = "/doB", method = RequestMethod.GET)
public int doB() {
logger.debug("doB() 호출");
return 1000;
}
오류남
라이브러리를 추가해주자
Maven Repository: com.fasterxml.jackson.core » jackson-databind » 2.16.0
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.16.0</version>
</dependency>
MemberVO
SpringMember에서 domain패키지 그대로 가져오고 lombok제거 후
오버라이딩 해주고 getter,setter추가
날짜 정보 지우기
package com.itwillbs.domain;
import java.sql.Timestamp;
public class MemberVO {
private String userid;
private String userpw;
private String username;
private String useremail;
@Override
public String toString() {
return "MemberVO [userid=" + userid + ", userpw=" + userpw + ", username=" + username + ", useremail="
+ useremail + "]";
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUserpw() {
return userpw;
}
public void setUserpw(String userpw) {
this.userpw = userpw;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUseremail() {
return useremail;
}
public void setUseremail(String useremail) {
this.useremail = useremail;
}
}
Controller
doC
객체리턴
// <http://localhost:8088/sample/doC>
@RequestMapping(value = "/doC",method = RequestMethod.GET)
public MemberVO doC() {
logger.debug(" doC() 호출 ");
MemberVO vo = new MemberVO();
vo.setUserid("admin");
vo.setUsername("관리자");
vo.setUserpw("1234");
vo.setUseremail("admin@admin.com");
// 객체를 JSON타입으로 변환
// 자바-객체, HTTP-JSON
// (자바 직렬화: 자바 시스템 내부의 객체를 외부에서 사용되는 데이터형태로 변환)
return vo;
}
JSON 타입의 데이터
-키-값 쌍
-중괄호
doD
// <http://localhost:8088/sample/doD>
@RequestMapping(value = "/doD",method = RequestMethod.GET)
public List<MemberVO> doD() {
logger.debug(" doD() 호출 ");
List<MemberVO> memberList = new ArrayList<MemberVO>();
for(int i=1;i<=10;i++) {
MemberVO vo = new MemberVO();
vo.setUserid("admin"+i);
vo.setUsername("관리자"+i);
vo.setUserpw("1234"+i);
vo.setUseremail("admin"+i+"@admin.com");
memberList.add(vo);
}
return memberList;
}
배열은 대괄호로 시작함
doE
Map은 키-값을 쌍으로
Map은 중괄호로 시작함
doF
동작하지않음
homeController에서 비동기방식으로 restController호출하기
<%@ taglib uri="<http://java.sun.com/jsp/jstl/core>" prefix="c" %>
<%@ page session="false" pageEncoding="UTF-8"%>
$(document).ready(function(){
$("#btnSend").click(function() {
//리소스를 생성해서 전달(비동기방식)
var member = {
/* "userid":$("요소").val(), */
"userid":"admin",
"userpw":"1234",
"username":"관리자",
"useremail":"admin@admin.com"
};
$.ajax({
url:"/sample/info",
success:function() {
alert('/sample/info 다녀옴');
},
error:function() {
alert("실패!");
}
}); //ajax
});//click
});
/sample/info로 동작하는 메서드 생성해보자
doInfo
// <http://localhost:8088/sample/info>
@RequestMapping(value = "info",method = RequestMethod.GET)
public String doInfo() {
logger.debug("doInfo() 실행");
return "OK";
}
실패가 아닌 다녀왔다는 alert가뜸
sampleRestController
// <http://localhost:8088/sample/info>
@RequestMapping(value = "info",method = RequestMethod.GET)
public String doInfo(MemberVO vo) {
logger.debug("doInfo() 실행");
logger.info("vo: "+vo);
return "OK";
}
home.js
vo: MemberVO [userid=admin, userpw=1234, username=관리자, useremail=admin@admin.com]
JSON타입의 문자열 형태로 전달
대소문자 구별해야함
type:”POST”, 추가
vo: MemberVO [userid=null, userpw=null, username=null, useremail=null]
그런데 데이터는 없음
405 : controller에서 get방식에서 post방식으로 호출하면 405가 뜸
controller에서 post방식으로 바꿔주자
// <http://localhost:8088/sample/info>
@RequestMapping(value = "/info",method = RequestMethod.POST)
public String doInfo(**@RequestBody** MemberVO vo) {
logger.info(" doInfo() 실행 ");
logger.info(" vo :"+vo);
return "OK";
}
JSON타입을 전달하려면 @RequestBody 어노테이션이 필수다
@RequestBody란?
- 브라우저에 전달되는 JSON데이터를 특정 객체로 자동변환
- 데이터가 반드시 HTTP 바디(메서드)에 포함되어야함
- 즉, GET방식 사용X
Controller전체코드
-
package com.itwillbs.controller; 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.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.ResponseBody; import org.springframework.web.bind.annotation.RestController; import com.itwillbs.domain.MemberVO; // @RestController : 해당 클래스를 REST방식 데이터 처리를 수행하는 클래스선언 // => @ResponseBody 자동 적용 @RestController @RequestMapping(value = "/sample") public class SampleRestController { private static final Logger logger = LoggerFactory.getLogger(SampleRestController.class); // <http://localhost:8088/sample/doA> @RequestMapping(value = "/doA", method = RequestMethod.GET) /* @ResponseBody */ public /* @ResponseBody */ String doA() { logger.debug(" doA() 호출 "); // 문자 데이터를 리턴 return "ITWILL"; } // <http://localhost:8088/sample/doB> @RequestMapping(value = "/doB", method = RequestMethod.GET) public Integer doB() { logger.debug(" doB() 호출 "); // String을 제외한 기본형타입리턴은 참조형타입으로 변경(권장) // 정수데이터를 의미(JSON) return 1000; } // <http://localhost:8088/sample/doC> @RequestMapping(value = "/doC", method = RequestMethod.GET) public MemberVO doC() { logger.debug(" doC() 호출 "); MemberVO vo = new MemberVO(); vo.setUserid("admin"); vo.setUsername("관리자"); vo.setUserpw("1234"); vo.setUseremail("admin@admin.com"); // 객체를 JSON타입으로 변환 // 자바-객체, HTTP-JSON // (자바 직렬화: 자바 시스템 내부의 객체를 외부에서 사용되는 데이터형태로 변환) return vo; } // <http://localhost:8088/sample/doD> @RequestMapping(value = "/doD", method = RequestMethod.GET) public List<MemberVO> doD() { logger.debug(" doD() 호출 "); List<MemberVO> memberList = new ArrayList<MemberVO>(); for (int i = 1; i <= 10; i++) { MemberVO vo = new MemberVO(); vo.setUserid("admin" + i); vo.setUsername("관리자" + i); vo.setUserpw("1234" + i); vo.setUseremail("admin" + i + "@admin.com"); memberList.add(vo); } return memberList; } // <http://localhost:8088/sample/doE> @RequestMapping(value = "/doE", method = RequestMethod.GET) public Map<Integer,MemberVO> doE() { logger.debug(" doE() 호출 "); Map<Integer,MemberVO> memberMap = new HashMap<Integer,MemberVO>(); for (int i = 1; i <= 10; i++) { MemberVO vo = new MemberVO(); vo.setUserid("admin" + i); vo.setUsername("관리자" + i); vo.setUserpw("1234" + i); vo.setUseremail("admin" + i + "@admin.com"); memberMap.put(i, vo); } return memberMap; } // /orders/99/products // /orders/99 // <http://localhost:8088/sample/doF/100> @RequestMapping(value = "/doF/{num}",method = RequestMethod.GET) public Integer doF(@PathVariable("num") Integer num) { logger.debug("doF() 실행"); return num; } // <http://localhost:8088/sample/info> @RequestMapping(value = "/info",method = RequestMethod.POST) public String doInfo(@RequestBody MemberVO vo) { // @RequestBody : 브라우저에 전달되는 JSON데이터를 특정 객체로 자동변환 // -데이터가 반드시 HTTP 바디(메서드)에 포함되어야함(GET방식 사용X) logger.info(" doInfo() 실행 "); logger.info(" vo :"+vo); return "OK"; } }
home.jsp 전체코드
-
<%@ taglib uri="<http://java.sun.com/jsp/jstl/core>" prefix="c" %> <%@ page session="false" pageEncoding="UTF-8"%> $(document).ready(function(){ //버튼 클릭시 $("#btnSend").click(function(){ // 리소스를 생성해서 전달(비동기방식) var member = { /* "userid":$("요소").val(), */ "userid":"admin", "userpw":"1234", "username":"관리자", "useremail":"admin@admin.com" }; $.ajax({ url : "/sample/info", type : "POST", contentType : "application/json", data : JSON.stringify(member), //json타입문자열로 전송 success:function(data){ alert('/sample/info 다녀옴!'); $('body').append(data); }, error:function(){ alert(" 실패! "); } });//ajax });//click });//ready
'spring · spring boot' 카테고리의 다른 글
[spring] REST API에 대해서 (1) | 2024.01.05 |
---|---|
[spring] security ⑥ - ResultMap과 sec 속성 사용하기 (0) | 2023.12.29 |
[spring] security ⑤ - 비밀번호 암호화, 회원정보에 따른 권한 설정 (1) | 2023.12.27 |
[spring] security ④ - 로그아웃 (0) | 2023.12.27 |
[spring] security ③ - 로그인 성공시 권한별로 페이지 이동 (1) | 2023.12.27 |