브라우저에 따라 PUT, PATCH, DELETE 방식을 지원하지 않는 경우가 있을 수 있다.
이를 해결하기 위해 대부분 브라우저에서는 일단 POST 방식으로 전송하고, 추가적인 정보를 통해 PUT, PATCH, DELETE 방식임을 전송한다.
$.ajax({
type: 'delete',
url: '/replies/'+rno,
headers: {
"Content-Type": "application/json",
"X-HTTP-Method-Override": "DELETE" },
dataType: 'text',
success: function(result){
console.log("result: " + result);
if(result == 'SUCCESS') {
alert("삭제 되었습니다");
getPage("/replies/" + bno + "/" + replyPage);
}
}});
ajax에서는 X-HTTP-Method_Override를 활용하여 전송 방식 정보를 전송한다.
<form>
태그로 처리<form name="board" method="post" action="/boards/{bno}">
<input type="hidden" name="_method" value="PUT"/>
</form>
<form>
태그를 이용해서 데이터를 전송하는 경우에는 POST 방식으로 전송하되, '_method' 라는 추가적인 정보를 이용한다.
Spring은 이를 위해서 HiddenHttpMethodFilter를 제공한다.
HiddenHttpMethodFilter는 <form>
태그 내에서 <input type='hidden' name='_method" value="PUT">
형태로 전송된 정보를 처리해 REST 방식을 사용할 수 있도록 설정한다.
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
출처:
코드로 배우는 스프링 웹 프로젝트 - 구멍가게 코딩단
https://multifrontgarden.tistory.com/138 [우리집앞마당]
안녕하세요 ~ 작성해주신 글 너무 큰 도움이 됬습니다.
혹시 PUT메소드 이용해서 update 할 때도 DELETE , CREATE 작성해주신것 활용해서 하면 되나요? CREATE와 DELETE 는 잘 되는데
ajax 처리방식으로 PUT메소드를 활용한 UPDATE를 하면 파라미터가 null로 들어오네요 ㅠ