2016-07-01 23 views
2
unterstützt

Ich habe folgenden Code:Upload-Datei: Request-Methode 'POST' nicht

@Controller 
public class FileUploadController { 

@Autowired 
private AttachmentsToSendJDBCTemplate attachmentsToSendJDBCTemplate; 

@RequestMapping(value = "/upload", method = RequestMethod.GET) 
public String showUploadForm(HttpServletRequest request) { 
    return "upload"; 
} 

@RequestMapping(value = "/doUpload", method = RequestMethod.POST) 
public String handleFileUpload(HttpServletRequest request, 
@RequestParam CommonsMultipartFile[] fileUpload) throws Exception { 
int a = 5; //breakpoint is here; 

upload.jsp:

<form method="post" action="doUpload" enctype="multipart/form-data"> 
    <table border="0"> 
     <tr> 
      <td><input type="file" name="fileUpload" size="50" /></td> 
     </tr>   
     <tr> 
      <td colspan="2" align="center"><input type="submit" value="Upload" /></td> 
     </tr> 
    </table> 
</form> 

web.xml:

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/application-context.xml, 
      /WEB-INF/spring-database.xml, 
      /WEB-INF/spring-security.xml, 
      /WEB-INF/spring-web-config.xml, 
      /WEB-INF/mail-service.xml 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/application-context.xml, 
     /WEB-INF/spring-database.xml, 
     /WEB-INF/spring-security.xml, 
     /WEB-INF/spring-web-config.xml, 
     /WEB-INF/mail-service.xml 
    </param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Feder-web -config.xml:

<context:component-scan base-package="com.github.fedorchuck.morshinska" /> 

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<bean id="multipartResolver" 
     class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> 

<mvc:resources mapping="/resources/**" location="/resources/" cache-period="31556926"/> 

<mvc:annotation-driven /> 

applikations context.xml:

<bean id="springSecurityFilterChain" class="org.springframework.web.filter.DelegatingFilterProxy"/> 

<bean id="userDetailsService" class="com.github.fedorchuck.morshinska.service.account.AccountDetailsServiceImpl"/> 

<bean class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" id="passwordEncoder"/> 

<bean id="emailJDBCTemplate" class="com.github.fedorchuck.morshinska.dao.impl.EmailJDBCTemplate"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

<bean id="usersJDBCTemplate" class="com.github.fedorchuck.morshinska.dao.impl.UsersJDBCTemplate"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

<bean id="attachmentsToSendJDBCTemplate" class="com.github.fedorchuck.morshinska.dao.impl.AttachmentsToSendJDBCTemplate"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

und log:

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping register 
INFO: Mapped "{[/upload],methods=[GET]}" onto public java.lang.String com.github.fedorchuck.morshinska.web.controller.FileUploadController.showUploadForm(javax.servlet.http.HttpServletRequest) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping register 
INFO: Mapped "{[/doUpload],methods=[POST]}" onto public java.lang.String com.github.fedorchuck.morshinska.web.controller.FileUploadController.handleFileUpload(javax.servlet.http.HttpServletRequest,org.springframework.web.multipart.commons.CommonsMultipartFile[]) throws java.lang.Exception 
... 
org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported 
    WARNING: Request method 'POST' not supported 
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver logException 
    WARNING: Handler execution resulted in exception: Request method 'POST' not supported 

Methode GET im Gegensatz zu POST (HTTP-Status 405 - Antrag-Methode 'POST' nicht unterstützt) korrekt arbeiten. Ich bin mir sicher - etwas stimmt nicht mit der Konfiguration. Also, wo ist mein Fehler. Bitte helfen Sie.

+0

Haben Sie andere Methoden in 'FileUploadController' abgebildet'/doUpload'? –

+0

Nein. Nur _handleFileUpload_ –

Antwort

1

Die Frage ist gelöst. Es war ein CSRF-Token. Genauer gesagt:

<form method="POST" 
     enctype="multipart/form-data" 
     action="doUpload?${_csrf.parameterName}=${_csrf.token}"> 
     ... 
     <input type="hidden" 
      name="${_csrf.parameterName}" 
      value="${_csrf.token}" /> 
</form> 

Weitere Informationen Kapitel in docs.spring.io

2

Können Sie einen Versuch geben? So habe ich die Methode auf meinem Controller eingerichtet.

@RequestMapping(value = "/doUpload", method = RequestMethod.POST) 
public String handleFileUpload(MultipartFile uploadedFile, HttpServletRequest request) throws Exception { 
int a = 5; //breakpoint is 

Ich bin nicht sicher, was CommonsMultipartFile tut. Ich glaube nicht, dass du @RequestParam brauchst.

Ich hoffe, es hat geholfen.

Update - Ich denke, das Problem ist der 'Wert' Attr auf der Schaltfläche. Es gibt keinen passenden Controller, der den Parameter 'Upload' akzeptiert.

+0

Ich arbeite nicht, das gleiche Problem. –

+0

Wie ändert man die Zeile - ' ​​' bis ' ' – exe

0

Probieren Sie es aus - verwenden Sie @RequestBody anstelle von @RequestParam.

+0

Ich arbeite nicht, dasselbe Problem. –

2

Sie reichen einen Wert von der Schaltfläche ein, akzeptieren ihn jedoch nicht auf der Controller-Methode.