@DeleteMapping 값 넘기기 / delete 값 보내기 / Rest API delete 값 / Rest api delete 파라미터 / Rest api delete 헤더 / Rest api delete 사용하는 방법 / @DeleteMapping 해더 / @DeleteMapping 파라미터 / @DeleteMapping body
by 으노으뇨2022. 12. 11.
728x90
반응형
SMALL
REST API Method 중 Get / Post에 대해서는 일반적인 프로젝트에서 많이 사용한다. 그런데 delete 관련되어서 정보가 많이 없다. REST API 에 대해 엄격하게 사용하려한다면 참고될 만한 포스팅
@DeleteMapping
서버단으로 값을 넘기는 3가지 방법
Paramiter (파라미터) 로 넘기기
PathVariable (패쓰배리어블) 로 넘기기
헤더에 정보를 담아 보내기
각 방법에 대한 설명 (파라미터 - > 패쓰배리어블 -> 헤더 순으로 진행)
테스트 환경
내가 보낼 데이터
var inData = { name : 'kimeunho' };
나의 개인정보를 보낼 것이다. 최소 이름정도로 하자. 내 이름 또는 이에 준하는 ID라던가 Primary - Key값 정도되는 정보가 되어야한다. 하다못해 게시판 삭제의 경우 게시판 번호를 넘긴다.
각 방법에 대해 각각 통신하는 버튼을 만들었으며 해당 버튼을 누르면 AJAX통신을 통해 서버에 값을 전달한다. 페이지 사진 각 버튼을 눌러서 각 방법으로 통신한다.
JSP 소스
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<scriptsrc="https://code.jquery.com/jquery-3.1.0.min.js"></script><scriptsrc="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script><!DOCTYPE html><html><head><metacharset="UTF-8"><title>DELETE TEST 페이지 입니다.</title></head><body><inputtype="button"id="deleteHeader"value="send data in Header"><inputtype="button"id="deletePathVal"value="send data in Path"><inputtype="button"id="deleteBody"value="send data in Body"><inputtype="button"id="deleteParam"value="send data in Param"><scripttype="text/javascript"src="/resources/js/test/APITest.js"></script></body></html>
J쿼리를 사용하기 위해서 임포를 한것 외에는 버튼 생성과 JavaScript 연동 소스밖에없다.
:: 조건 :: 1. $Ajax 를 사용할 것 2. 다른 설정파일을 따로 건드리지 말 것 ( 오리지날하게 간다는 뜻)
1. 파라미터로 보내기
Paramiter로 보내기 ( 자주 사용함) 보낼값을 파라미터에 담아서 보내는 방법이다. Url에 그대로 노출될 수 있으며 사람들이 자주 사용한다. 우선 설계하기 가장 간단해서 많이 사용하는 것 같다. AJAX 소스
function _deleteAjaxParam(){
let paramData = new URLSearchParams(inData).toString();
$.ajax({
type: "delete"
, url: "param?" + paramData
, success: function(){}
});
}
설명 : 우선 Url 에 그대로 값을 보내는 것에 동일하다. 예를들어 시퀀스가 232인 게시판을 삭제하려고 서버에 요청 할때 /delete/232 이렇게 넘겨서 삭제하는 방법으로 많이 사용한다. 물론 겟방식이 아니라 Url에 그대로 /delete/kimeunho 이렇게 친다고 서버로 값이 들어가는 것은 아니다.
Url에 그대로 쳐서 나온 결과
3. Header에 값을 넣어서 보내기
Header에 값을 넣어서 보내기 다른 방법과 다르게 Url 에 노출을 최소화 하기 위해서 이용한다. 물론 보안에서 훨씬 좋느냐? 그것도 아니다. 어짜피 개발자 모드에서 헤더 뜯어내고 그러면 다 나온다. 그래도 노출을 최소화하기 위함이다.
var inData = {
name : 'kimeunho'
, TestVO : {
age : '29'
, gender : 'male'
}
};
이런형태의 데이터 형태를 가져 올 수 있을까?
뭔가 들어오는데 오브젝트 형태로 들어온다.
4. RequestBody는 안될까?
가능은 하나. Delete 명세를 벗어 나는 형태입니다.
A payload within a DELETE request message has no defined semantics; sending a payload body on a DELETE request might cause some existing implementations to reject the request.
가능은 하나 그럼 스프링설정을 변경해주어야 합니다.
그렇게 변경해서 꼭 사용하고 싶다면 차라리 헤더에서 담아서 보내주는게 훨씬 좋을 것같습니다.
설정 파일을 변경하고 소스리뷰에
??? : 아무튼 변경했음 Delete 메소드에 Body쓰고싶으면 나중에 너희들도 쓰셈
이렇게 하는 것 보다 헤더에 값을 보내거나 PathVariable로 좀더 공인된 방법으로 사용하는 것을 저는 좋아합니다.
댓글