[Spring] REST 기초 - 4 : Ajax - put(갱신, update)

 REST 방식에서의 ajax는 type 값을 "put"으로 지정한다.

① : 업데이트의 경우 "PUT" 로 고정 

② : 요청하거나 받은 URL

③ : 전송 데이터

※ ajax를 이용하므로, 전송 데이터를 json 형식으로 지정할 필요가 있음
- JOSON.stringify(전송에 사용될 데이터 변수 명)

④ : 전송 데이터 타입(application/json;charset=utf-8 사용)

 : 전송/수신 성공 시 수행 할 동작이나 callback 함수 사용

- function(data)의 data는 수신 받은 데이터를 저장함

 : 전송/수신 실패 시 수행 할 동작이나 callback 함수 사용(주로 오류 출력)


응답 처리 controller 부분

1
2
3
4
5
6
7
8
9
10
11
12
13
/* 
   request RequestMethod.PUT : REST PUT 처리 
   RequestMethod.PATCH : REST PUT(일부)처리
   consumes : 받는 값의 타입 명시
*/
@RequestMapping(method = {RequestMethod.PUT, RequestMethod.PATCH}, value="/{bno}", consumes = "application/json")
    public ResponseEntity<String> modify(@RequestBody BoardVO vo, @PathVariable("bno") Long bno){
        vo.setBno(bno);
        log.info("bno : "+bno);
        log.info("modify : "+vo);
        // 갱신 성공시 1, 실패시 0
        return mapper.update(vo) == 1 ? new ResponseEntity<String>("success", HttpStatus.OK) : new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR);
    }
cs

※@PathVariable

- value 값으로 들어가는 url의 일부를 매개변수로 사용함을 알림

- value="{변수 명}" 으로 value 값에 명시


※ RequestMethod.PUT, RequestMethod.PATCH

출처 : 참고 블로그


- 같은 요청(갱신)을 처리할 때, put의 경우 없는 속성에 대해서는 null 처리가 되나, patch의 경우 자동으로 없는 속성에 대해 처리한다.

- 실습 자바 스크립트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function sampleUpdate(bvo, callback, error){
        console.log("update")
        $.ajax({
            type:'put',
            url:'/sample/'+bvo.bno, //pk에 대한 값을 url에 저장(get 방식)
            data : JSON.stringify(bvo),
            contentType : "application/json; charset=utf-8",
            success : function(result){
                if(callback){
                    callback(result);
                }
            },
            error : function(er){
                if(error){
                    error(er)
                }
            }
        });
    
    }
cs


- 실습 jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div id = "sampletest">
<input type="hidden" name="bno" value="${board.bno}">
title : <input type="text" name="title" value="${board.title}"><br>
content : <input type="text" name="content" value="${board.content}"><br>
writer : <input type="text" name="writer" value="${board.writer}"><br>
</div>
 
<button id="sampleBtnUpdate">갱신</button>
 
</body>
<script src="http://code.jquery.com/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="/resources/js/sampleTest.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        //"갱신" 버튼 클릭시 갱신 동작 수행
        $("#sampleBtnUpdate").on("click"function(e){
            var divtest = $("#sampletest")
            //input 태그 수진
            var bno = divtest.find("input[name=bno]")
            var title = divtest.find("input[name=title]")
            var content = divtest.find("input[name=content]")
            var writer = divtest.find("input[name=writer]")
            
            //값에 대해 모두 수집 후 하나의 객체로 
            var bvo = {
                bno : bno.val(),
                title : title.val(),
                content : content.val(),
                writer : writer.val()
            };
            
            testService.sampleUpdate(bvo, function(result){
                console.log(result);
            })
            
        })
 
    })
 
</script>
</html>
cs


※ post 방식으로 갱신 동작은 가능하나, REST 방식을 사용한 것이 아닌, 단순 ajax를 이용한 방식이다. 


댓글