这是我的控制者:
@Controller
public class UserController {
@Autowired
UserService userService;
@Autowired
SaveBatchService saveBatchService;
@Autowired
MassSMSFormValidator massSMSFormValidator;
@Autowired
SingleSMSFormValidator singleSMSFormValidator;
@RequestMapping("/userRole/sms/mass")
public String massSMSPage(Map<String, Object> map,
@ModelAttribute("massSMSForm") MassSMSForm massSMSForm) {
map.put("title", "Массовая рассылка");
return "massSMS";
}
@RequestMapping(value="/userRole/sms/mass" ,method = RequestMethod.POST)
public String massSMSProcess(Map<String, Object> map,
@ModelAttribute("massSMSForm") MassSMSForm massSMSForm,
BindingResult result) throws IOException {
InputStream inputStream = null;
MultipartFile file = massSMSForm.getFile();
massSMSFormValidator.validate(massSMSForm, result);
if (result.hasErrors()) {
map.put("errorFlag", true);
return massSMSPage(map, massSMSForm);
}
//and so on
}
这是形式:
<form:form method="post" enctype="multipart/form-data"
modelAttribute="massSMSForm">
<c:if test="${!empty errorFlag}">
<div class="alert alert-danger">
<b>Ошибка. </b>
<form:errors path="file" />
</div>
</c:if>
<table>
<tr>
<td><input type="file" name="file" accept="text/xml, text/plain" /></td>
</tr>
<tr>
<td><br /> <input type="submit" value="Загрузить" /></td>
</tr>
</table>
</form:form>
此页面必须上传文件并检查其名称。如您所见,有一种特殊的方法来处理POST请求。但我的服务器在提交后说Request method 'POST' not supported
。怎么了?我是否必须使用command
attr。而不是modelAttribute
或什么?
UPD:
生成HTML
:
<form id="massSMSForm" action="/smsc/userRole/sms/mass" method="post" enctype="multipart/form-data">
<table>
<tr>
<td><input type="file" name="file" accept="text/xml, text/plain"/></td>
</tr>
<tr>
<td><br /> <input type="submit" value="Загрузить" /></td>
</tr>
</table>
<input type="hidden" name="_csrf" value="0cd9d283-2ca7-4adc-af4a-ce72a09ceaae" />
</form>
此外,如果我删除enctype="multipart/form-data"
,则此消息不会显示。我试图添加headers = "content-type=multipart/form-data"
,但没有效果。
答案 0 :(得分:2)
您重复了两次相同的PATH,而没有在第一个中指定请求类型。
更改第一个
@RequestMapping(value="/userRole/sms/mass" ,method = RequestMethod.GET)
看起来是第一条路径
看着你的HTML的路径我想你有一个像
这样的控制器 @Controller
@RequestMapping("/smsc/")
public class MyController{}
同样在您的方法中,更改
并从表单中删除。您发送的文件不是实体 MultipartHttpServletRequest defaultMultipartHttpServletRequest