Java JsonMappingException:无法构造CommonsMultipartFile的实例

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

我使用的是Spring MVC 3.0,在我的应用程序中,我发送了一些带有多个附件的信息,其中每个文件都有标题、Id等。因此,我制作了一个DTO,如下所示

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));