讓form表單可以使用RESTful

在SpringMVC中有HiddenHttpMethodFilter的過濾器,可以去過濾form的POST方法中的hiddn欄位的值,已達成RESTful。

在WebAppInitializer.java中建立HiddenHttpMethodFilter:


import javax.servlet.Filter;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
    return new Class[] {RootAppConfig.class};
}

@Override
protected Class<?>[] getServletConfigClasses() {
    return new Class[] {WebAppConfig.class};
}

@Override
protected String[] getServletMappings() {
    return new String[] {"/"};
}

@Override
protected Filter[] getServletFilters() {
    CharacterEncodingFilter cef = new CharacterEncodingFilter();
    cef.setEncoding("UTF-8");
    cef.setForceEncoding(true);
    
    HiddenHttpMethodFilter hiddenHemthodFilter = new HiddenHttpMethodFilter();
    
    return new Filter[] {cef, hiddenHemthodFilter};
}

}

form的寫法:


<form method="post" action="controller>
  <input type="hidden" name="_method" value="put" />
</form>
<form method="post" action="controller>
  <input type="hidden" name="_method" value="delete" />
</form>

(* name="_method",底線()是必要的,沒用的話HiddenHttpMethodFilter會找不到)

留言