PUT, PATCH, DELETE 방식의 메소드를 지원하지 않는 브라우저가 있을 때 이를 위해 스프링 진영에서 HiddenHttpMethodFilter라는 것을 제공한다.
HiddenHttpMethodFilter는 HiddenMethod(지원이 안되는 메소드명을 _method라는 이름에 담아서) + POST 요청을 스프링 컨트롤러에 전송하는 방법이다.
정확히 말해서 HiddenHttpMethodFilter는 Hidden 타입의 input 태그의 속성들을 읽어서 HttpServletRequestWraaper.getMethod() 반환값을 변경해 요청된 HTTP 메소드의 타입을 PUT, DELETE, PATCH로 변경해주는 필터이다.
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</filter>
@Configuration
public class MvcConfig extends WebMvcConfigurationSupport {
@Bean
public HiddenHttpMethodFilter httpMethodFilter(){
HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
return hiddenHttpMethodFilter;
}
}
<form action="/user/delete" method="post">
<input type="hidden" name="_method" value="delete">
<input type="text" name="id">
<input type="submit" value="사용자 삭제">
</form>