JsonMappingException:无法构建CommonsMultipartFile实例(Js

2019-10-20 10:10发布

我使用Spring的MVC 3,并在我的申请,我发送带有多个附件的一些信息,每一个该文件中有一个标题,ID等,所以,我做了一个DTO如下

public class MyDTO {

Long id;

Integer age;

MultipartFile infoFile;

// getter setter

我只是创造一个JSON按照我上面的DTO类对象JS文件。

这里是我的Controller的映射:

@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();
        }

但我得到以下错误:

org.codehaus.jackson.map.JsonMappingException: Can not construct instance of    org.springframework.web.multipart.commons.CommonsMultipartFile, 
problem: no suitable creator method found to deserialize from JSON String
at [Source: java.io.StringReader@19747c9; line: 1, column: 336] (through reference chain: com.avi.dto.MyDTO["hbvFile"])

Answer 1:

其实我觉得我自己的答案。 我们不能直接在JSON对象发送文件。 一个File对象不保存文件时,它保存文件路径,即。 C:/hi.txt。 如果这就是我们把我们的JSON,它会产生

{"File" : "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文件上传,一个方法是从与Java 7的NIO的文件中读取的字节数

byte[] bytes = Files.readAllBytes(file_upload .toPath());

Base64编码,这些字节,并将其写入作为JSONObject的字符串。 使用Apache共享编解码器

Base64.encodeBase64(bytes);
my_data.put("File", new String(bytes));

94 Unicode其可以根据JSON规范(如果您的JSON作为UTF-8传送)被表示为一个字节字符。



文章来源: JsonMappingException: Can not construct instance of CommonsMultipartFile