[REST] PUT, PATCH, DELETE 미지원 처리

HyeJin Jeon·2020년 5월 19일
1

REST API

목록 보기
2/2

브라우저에 따라 PUT, PATCH, DELETE 방식을 지원하지 않는 경우가 있을 수 있다.

이를 해결하기 위해 대부분 브라우저에서는 일단 POST 방식으로 전송하고, 추가적인 정보를 통해 PUT, PATCH, DELETE 방식임을 전송한다.

1. Ajax 로 처리

$.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를 활용하여 전송 방식 정보를 전송한다.




2. <form> 태그로 처리

<form name="board" method="post" action="/boards/{bno}">
    <input type="hidden" name="_method" value="PUT"/>
</form>

<form> 태그를 이용해서 데이터를 전송하는 경우에는 POST 방식으로 전송하되, '_method' 라는 추가적인 정보를 이용한다.




3. Spring 으로 처리

Spring은 이를 위해서 HiddenHttpMethodFilter를 제공한다.

HiddenHttpMethodFilter는 <form> 태그 내에서 <input type='hidden' name='_method" value="PUT"> 형태로 전송된 정보를 처리해 REST 방식을 사용할 수 있도록 설정한다.

web.xml에 HiddenHttpMethodFilter 설정 추가
<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 [우리집앞마당]

profile
Backend Developer

1개의 댓글

comment-user-thumbnail
2020년 9월 28일

안녕하세요 ~ 작성해주신 글 너무 큰 도움이 됬습니다.
혹시 PUT메소드 이용해서 update 할 때도 DELETE , CREATE 작성해주신것 활용해서 하면 되나요? CREATE와 DELETE 는 잘 되는데
ajax 처리방식으로 PUT메소드를 활용한 UPDATE를 하면 파라미터가 null로 들어오네요 ㅠ

답글 달기