ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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메소드를 지원하지 않았다.

    https://api.jquery.com/jquery.ajax/

    하지만 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
Designed by Tistory.