본문 바로가기
dev/spring

HiddenHttpMethodFilter

by igooo 2010. 6. 24.
728x90

Spring 3 MVC 기능 중 Controller에
@RequestMapping 어노테이션에 method 속성을 사용하기 위해서는
web.xml 아래 필터를 설정해야 한다.

    <filter>
        <filter-name>httpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>httpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

UrlRewriteFilter 필터도 사용한다면 UrlRewriteFilter 필터보다 위에 위치해야한다.


간단한 삭제 Controller 코드

    @RequestMapping(value = "/admin/board/{id}", method = RequestMethod.DELETE)
    public String delete(@PathVariable("id") int id) {
        boardService.deleteById(id);
        return "redirect:/admin/board";
    }

JSP에서는 form에

<form mehod="post">
    <input type="hidden" name="_method" value="delete" />
</form>
이런식으로 실제로는 POST 방식으로 요청하지만 _method에 값을 보고 위에서 설정한
HiddenHttpMethodFileter가 자동으로 컨트롤러에 맵핑을 해준다.

아직 DELETE, PUT과 같은 메소드를 브라우져에서 지원하지 않는 브라아져들이 있어서 위처럼 사용한다.
Rails에서도 동일한방식으로 작동한다  ^^