gpt4 book ai didi

java - Spring MVC错误405 上传文件时不支持请求方法 'POST'

转载 作者:行者123 更新时间:2023-11-30 07:08:10 25 4
gpt4 key购买 nike

我想我已经看过网络上关于这个主题的所有帖子,但我无法纠正该错误 :(

我有一个使用 Spring Security 和 Spring Mvc 的 Web 应用程序,我想创建一个表单来上传图像(你必须登录才能这样做)但是无论我如何将我的代码与我在论坛上找到的内容结合起来,我有一个错误 405 上传文件时不支持请求方法“POST”

这是我的 applicationContext.xml :

 <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">


<context:component-scan base-package="com.meltdown.*" />
<context:annotation-config />

<bean id="userDAO" class="com.meltdown.bo.users.infra.impl.JdbcUserDAO">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="userService" class="com.meltdown.bo.users.application.service.impl.StandardUserService" />

<bean id="barDAO" class="com.meltdown.bo.bars.infra.impl.JdbcBarDAO">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="barService" class="com.meltdown.bo.bars.application.service.impl.StandardBarService" />

<bean id="newsDAO" class="com.meltdown.bo.news.infra.impl.JdbcNewsDAO">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="newsService" class="com.meltdown.bo.news.application.service.impl.StandardNewsService" />

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="maxUploadSize" value="100000"/>
</bean>
</beans>

我的 Controller :

@Controller
public class FileUploadController {
@RequestMapping(value="/bo/uploadImage", method = RequestMethod.GET)
public String uploadImage() {

return "bo_uploadimage";
}

@RequestMapping(value="/bo/uploadImage", method = RequestMethod.POST)
public String uploadImage(@RequestParam(value = "file")FileUploadBean file, BindException errors, Map<String, Object> model) {

System.out.println("#############################" + file);

return "bo_uploadimage";
}
}



public class FileUploadBean{

private byte[] file;

public void setFile(byte[] file) {
this.file = file;
}

public byte[] getFile() {
return file;
}
}

jsp:

<html>
<head>
<title>Upload a file please</title>
</head>
<body>
<h1>Please upload a file</h1>
<form method="post" action="/meltdown/bo/uploadImage" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit"/>
</form>
</body>
</html>

我认为问题出在我的 Controller 上,也许是因为我将 Spring 4 注释与 Spring3 conf 混淆了?

感谢您的帮助!

编辑 mvc-dispatcher-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<context:component-scan base-package="com.meltdown.*" />

<mvc:annotation-driven />

<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:messages" />
<property name="defaultEncoding" value="ISO-8859-1" />
</bean>

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

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="maxUploadSize" value="100000"/>
</bean>
</beans>

最佳答案

好吧,我终于找到问题了。

首先,我使用了几乎所有教程中提到的 MultipartFile,并且我使用 @ModelAttribute 将此 MultipartFile 映射到我的表单。但这并不是真正的问题:我只是清理了实现以使其更标准。

然后,我在 DEBUG 日志中发现了错误:

20:58:38,370 DEBUG CsrfFilter:95 - Invalid CSRF token found for http://localhost:8080/meltdown/bo/createnews

我使用 spring recommendation 来纠正它:(参见 spring security csrf doc)

There are two options to using CSRF protection with multipart/form-data. Each option has its tradeoffs.

Placing MultipartFilter before Spring Security

Include CSRF token in action

我使用了第二个选项并将 ?${_csrf.parameterName}=${_csrf.token} 放在表单的操作 url 的末尾。

它有效,但我必须挖掘一下所有这些东西下面的内容...并检查真正的内容以及我是否需要 csrf。

谢谢大家的帮助

关于java - Spring MVC错误405 上传文件时不支持请求方法 'POST',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24190962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com