如何编组 springframework.web.multipart.MultipartFile
How to marshal springframework.web.multipart.MultipartFile
我正在尝试编组多部分文件但得到以下内容
com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (WhosebugError) (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);
感谢您对此提供的任何帮助
经过一些研究和一些线索和错误,下面的代码解决了我遇到的问题。
服务:
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 中使用了字节数组而不是多部分文件,这为我解决了问题。
我正在尝试编组多部分文件但得到以下内容
com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (WhosebugError) (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);
感谢您对此提供的任何帮助
经过一些研究和一些线索和错误,下面的代码解决了我遇到的问题。
服务:
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 中使用了字节数组而不是多部分文件,这为我解决了问题。