转载:怎样获取form-data方式POST的数据_laokaizzz的专栏-CSDN博客
用x-www-form-urlencoded方式提交表单就可以正常绑定数据,但是用form-data方式提交就绑定不了:
-
@Controller
-
@RequestMapping("/tag")
-
public class TagController {
-
@Autowired
-
private NanTianMenFacade nanTianMenFacade;
-
@RequestMapping(value = "/uploadTags")
-
@ResponseBody
-
public TagUploadResult uploadTags(TagParams params) {
-
String tagIds = params.getTagIds();
-
String uuid = params.getUuid();
-
TagUploadResult result = null;
-
try {
-
result = nanTianMenFacade.uploadTags(tagIds, uuid);
-
} catch (Exception e) {
-
result = new TagUploadResult();
-
result.setS(0);
-
}
-
return result;
-
}
-
}
对于我来说,一直都是用x-www-form-urlencoded提交表单数据,除非是要上传文件,才会使用form-data方式。也一直以为Spring对不同的提交方式应该是透明的。不过确实用form-data提交普通表单,确实是拿不到提交的数据。DEBUG发现, request.getParameterMap()
返回的就是空的!
然后发现 org.apache.commons.io.IOUtils.toString(request.getInputStream());
其实是有返回提交的数据的:
-
@Controller
@RequestMapping("/tag")
public class TagController {
@Autowired
private NanTianMenFacade nanTianMenFacade;
@RequestMapping(value = "/uploadTags")
@ResponseBody
public TagUploadResult uploadTags(TagParams params) {
String tagIds = params.getTagIds();
String uuid = params.getUuid();
TagUploadResult result = null;
try {
result = nanTianMenFacade.uploadTags(tagIds, uuid);
} catch (Exception e) {
result = new TagUploadResult();
result.setS(0);
}
return result;
}
}
也就是数据其实是有正常提交到后台的。那么就是这种方式提交的数据,并没有放在pararmeterMap中了。而是要自己去解析这个inputstream的内容,再放回parameterMap中,这样Spring才能够绑定?这个不就是 multipartResolver
做的事情吗?试着配置了一下,发现果然可以了:加油