我必须编写一个使用multipart/form-data
的REST API。 当我编写如下方法时,它工作得很好
@RequestMapping(value="/addSftp", method=RequestMethod.POST)
public HashMap<String, Object> welcome( HttpServletRequest request,@RequestParam(value="selectedFile", required=false) MultipartFile selectedFile,
@RequestParam(value="sftp_name") String sftp_name,
@RequestParam(value="ip_address")String ip_address,
@RequestParam(value="port_number")String port_number,
@RequestParam(value="userName")String userName,
@RequestParam(value="password")String password,
@RequestParam(value="customRadioInline1")String customRadioInline1) {
HashMap map = new HashMap<String, Object>();
System.out.println(sftp_name);
System.out.println(ip_address);
System.out.println(port_number);
System.out.println(userName);
System.out.println(password);
System.out.println(customRadioInline1);
System.out.println(selectedFile);
map.put("stat", "success");
return map;
}
我想把请求映射到一个bean。 下面是我的豆子
public class SftpBean {
private String sftp_name;
private String ip_address;
private String port_number;
private String userName;
private String password;
private String customRadioInline1;
private MultipartFile selectedFile;
//getters and setters here
}
但是当我编写如下方法时,我得到了异常
public HashMap<String, Object> welcome( @RequestBody SftpBean sftpBean) {
HashMap map = new HashMap<String, Object>();
System.out.println(sftpBean.getIpAddress());
//similar statements for priniting other parameters
map.put("stat", "success");
return map;
}
这是我的例外
Resolved [org.springframework.web.HttpMediaTypeNotSupportedException:
Content type 'multipart/form-data;boundary=---------------------------246741595337214313524058968681;charset=UTF-8' not supported]
这是我的请求负载
-----------------------------317042354532732980343175029806
Content-Disposition: form-data; name="sftp_name"
ABC
-----------------------------317042354532732980343175029806
Content-Disposition: form-data; name="ip_address"
123
-----------------------------317042354532732980343175029806
Content-Disposition: form-data; name="port_number"
456
-----------------------------317042354532732980343175029806
Content-Disposition: form-data; name="userName"
demo
-----------------------------317042354532732980343175029806
Content-Disposition: form-data; name="password"
demo123
-----------------------------317042354532732980343175029806
Content-Disposition: form-data; name="customRadioInline1"
pwd
-----------------------------317042354532732980343175029806
Content-Disposition: form-data; name="selectedFile"; filename="details.txt"
Content-Type: text/plain
有没有一种方法可以直接将请求映射到我的SFTPBean
?
您需要在@requestmapping
内添加@consumes
或consumes=
,以指定服务器端可接受的内容类型。 如果您发送的是多部分表单数据,则可以使用mediatype.multipart_form_data
(如果您将请求作为多部分表单发送)。 但是,如果要将其封装到一个对象中并将其作为json发送,则需要使用mediatype.application_JSON
。 还要确保从使用RestController
的客户端发送正确的格式。 在创建REST请求时,您需要在客户端将有效负载从multipart表单更改为json格式。 修改后的方法只需要一个json对象SFTPBean
,而这个对象在您的负载中根本找不到。
您可以为要发送的主体创建一个RequestPart
以及MultipartFile
。
下面是我的做法:
@PostMapping("/hello/upload")
public SftpBean upload(@RequestParam("file") MultipartFile file,
@RequestPart("body") SftpBean sftpBean) {
return sftpBean;
}
Pojo保持不变。