-
[REST API] AJAX로 PUT메소드 요청시 ModelAttribute로 파라미터 매핑하기웹/Spring 2021. 3. 4. 22:31
프로젝트 진행시 Ajax를 이용해 데이터베이스를 수정할 일이 생겼다. 작성한 Ajax코드는 다음과 같다.
$.ajax({ type: "put", url: "${contextPath}/word/review.do", data: { word: wordCardValue, mean: meanCardValue, wordId: wordIdValue }, success: function (data) { alert(data); }, error: function (data) { alert("에러가 발생했습니다." + data); } });
보통, @ModelAttribute나 @RequestParam을통해 클라이언트에서 전달받은 파라미터를 매핑 해주겠지만 이는 form태그에서 지원하는 GET, POST에만 해당한다.
HTML form태그는 Controller에게 요청을 전달할때 content-type:application/x-www-form-urlencoded방식으로 전달하며 이 content-type은 form태그의 GET, POST방식 밖에 지원하지 않는다. ajax도 마찬가지로 content-type의 default값은 application/x-www-form-urlencoded이므로 당연히 PUT메소드를 지원하지 않았다.
하지만 REST API를 설계하는 입장에서 두 방식 외에 PUT, DELETE HTTP 메소드 하는 일이 있고 ResponseBody을 사용해 처리할 수 있겠지만, 파라미터를 매핑해야 한다면, 다음과 같은 필터를 추가해주면 된다.
<filter> <filter-name>httpPutFormFilter</filter-name> <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class> </filter> <filter-mapping> <filter-name>httpPutFormFilter</filter-name> <servlet-name>appServlet</servlet-name> </filter-mapping>
servlet-name에는 dispatcher 서블릿 이름으로 변경하면 된다.
'웹 > Spring' 카테고리의 다른 글
spring web.xml에 대해 분석 (0) 2021.02.17 Spring 동작 원리 (1) 2020.10.26