Java JsonMappingException:无法构造CommonsMultipartFile的实例
我使用的是Spring MVC 3.0,在我的应用程序中,我发送了一些带有多个附件的信息,其中每个文件都有标题、Id等。因此,我制作了一个DTO,如下所示Java JsonMappingException:无法构造CommonsMultipartFile的实例,java,json,spring-mvc,jackson,multipart,Java,Json,Spring Mvc,Jackson,Multipart,我使用的是Spring MVC 3.0,在我的应用程序中,我发送了一些带有多个附件的信息,其中每个文件都有标题、Id等。因此,我制作了一个DTO,如下所示 public class MyDTO { Long id; Integer age; MultipartFile infoFile; // getter setter 我只是根据我的JS文件中的上述DTO类创建一个JSON对象 这是我的控制器映射: @RequestMapping(value = "/saveInfo&qu
public class MyDTO {
Long id;
Integer age;
MultipartFile infoFile;
// getter setter
我只是根据我的JS
文件中的上述DTO类创建一个JSON
对象
这是我的控制器
映射:
@RequestMapping(value = "/saveInfo", method = RequestMethod.POST)
public @ResponseBody String saveInfo(
@RequestParam(value = "data", required = true) String stdData,
@RequestParam(value = "fileData", required = false) MultipartFile[] files,
HttpSession session,HttpServletRequest request) {
MyDTO dto;
try {
dto = mapper.readValue(stdData, new TypeReference<MyDTO>() {});
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
事实上,我为自己找到了答案。我们不能直接在JSON对象中发送文件。
文件
对象不保存文件,它保存文件的路径,即.C:/hi.txt。如果这就是我们在JSON中输入的内容,它将生成
{“文件”:“C:/hi.txt”}
它将不包含文件内容。所以我们不妨直接把文件路径放进去
JSONObject my_data = new JSONObject();
my_data.put("User", "Avi");
my_data.put("Date", "22-07-2013");
my_data.put("File", "C:/hi.txt");
如果您试图使用JSON进行文件上传,一种方法是使用Java7的NIO从文件中读取字节
byte[] bytes = Files.readAllBytes(file_upload .toPath());
Base64对这些字节进行编码,并将它们作为字符串写入JSONObject。使用apachecommons编解码器
Base64.encodeBase64(bytes);
my_data.put("File", new String(bytes));
有
94个Unicode
字符,根据JSON规范可以表示为一个字节(如果您的JSON是以UTF-8传输的)。它可能需要一个无参数构造函数,而CommonsMultipartFile
没有。您能展示一下JSON
的外观吗?
Base64.encodeBase64(bytes);
my_data.put("File", new String(bytes));