如何编组 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 中使用了字节数组而不是多部分文件,这为我解决了问题。