我正在尝试编组Multipartfile,但得到以下内容
com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: java.io.FileInputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileInputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileInputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileInputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileInputStream["fd"]->java.io.FileDescriptor["parent"]->java.io.FileInputStream["fd"]->java.io
我尝试使用google方式同步Multipartfile或将Multipartfile转换为CommonsMultipartFile,但始终遇到问题,我使用的是SpringBoot 2.1.2。下面是我的代码
控制器:
@PostMapping(path = "/upload")
public ResponseEntity<Void> save(@RequestPart("document") CommonsMultipartFile multipartfile, @RequestPart("userDTO") UserDTO userDTO) {
fileService.save(multipartfile, userDTO);
return new ResponseEntity<>(HttpStatus.CREATED);
}
服务:
public void jacksonDataFormat(UserDTO userDTO) {
try {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
objectMapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
objectMapper.writeValueAsString(userDTO);
} catch (Exception e) {
System.out.println(e);
}
}
public void save(MultipartFile multipartfile, UserDTO userDTO) {
userDTO.setDocument(multipartfile);
jacksonDataFormat(userDTO);
publisher.publishEvent(new CreateEvent(saveDocumentDTO));
}
下面是引发JsonMappingException的代码:
objectMapper.writeValueAsString(userDTO);
我对此表示感谢
答案 0 :(得分:0)
经过一些研究,发现了一些错误之后,下面的代码解决了我遇到的问题。
服务:
public void jacksonDataFormat(UserDTO userDTO) {
try {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
objectMapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
objectMapper.writeValueAsString(userDTO);
} catch (Exception e) {
System.out.println(e);
}
}
public void save(MultipartFile multipartfile, UserDTO userDTO) {
userDTO.setDocumentContent(multipartfile.getBytes());
jacksonDataFormat(userDTO);
publisher.publishEvent(new CreateEvent(saveDocumentDTO));
}
我在UserDTO中使用字节数组代替了multipartfile,这为我解决了这个问题。