Restful风格,PUT修改功能请求,表单中存在文件报错-HTTP Status 405 - Request method 'POST' not supported

Posted 秋夜雨巷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Restful风格,PUT修改功能请求,表单中存在文件报错-HTTP Status 405 - Request method 'POST' not supported相关的知识,希望对你有一定的参考价值。

解决方案配置如下

    <!-- 配置文件上传解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
         <!-- 指定所上传文件的总大小不能超过20M。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 --> 
         <property name="maxUploadSize" value="20000000"/>
         <property name="defaultEncoding" value="utf-8"></property>
    </bean>

    <!-- web.xml中引入上面配置,这个很重要!只有在contextConfigLocation配置的文件下的bean才会直接被加载供下面的过滤器调用 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/root-context.xml</param-value>
    </context-param>    

    <!--form表单中存在文件时,该过滤器可以处理http请求中的文件,被该过滤器过滤后会用post方法提交,form表单需设为enctype="multipart/form-data"-->
    <filter>
        <filter-name>MultipartFilter</filter-name>
        <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
        <init-param>
            <param-name>multipartResolverBeanName</param-name>
            <!--spring中配置的id为multipartResolver的解析器-->
            <param-value>multipartResolver</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>MultipartFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--解析form表单中隐藏的name为_method的input,需放在MultipartFilter之后,才能在对应的put请求方法中找到对应的controller-->
    <filter>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

原理是过滤器是逐个进行的,先用MultipartFilter处理文件,在用HiddenHttpMethodFilter处理form表单中隐藏的name为_method的input。其次MultipartFilter配置的multipartResolverBeanName的值要在contextConfigLocation配置的xml中。

org.springframework.web.multipart.support.MultipartFilter会处理http请求中的文件流,无法解析_method参数。

org.springframework.web.filter.HiddenHttpMethodFilter可以解析form表单中隐藏的name为_method的input。

 

以上是关于Restful风格,PUT修改功能请求,表单中存在文件报错-HTTP Status 405 - Request method 'POST' not supported的主要内容,如果未能解决你的问题,请参考以下文章

Restful风格

什么是restful风格编程

restful风格

Ajax中Put和Delete请求传递参数无效的解决方法(Restful风格)

让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求

RESTFUL风格 put 报错 HTTP Status 405 - JSPs only permit GET POST or HEAD