代码之家  ›  专栏  ›  技术社区  ›  Ver

带有Spring Rest模板的多部分文件http请求到达时没有文件

  •  0
  • Ver  · 技术社区  · 7 年前

    我有一个客户端,用于使用Rest模板发送多部分文件http请求

        @Component
        public class RestTemplatePost {
    
            @Bean
            public RestTemplate restTemplate() {
                return new RestTemplate();
            }
    
            @PostConstruct
            public void prepareMessage() throws Exception {
    
                File file = new File("****");
                File file2 = new File("****");
    
                HttpHeaders httpHeaders = new HttpHeaders();
                httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
    
                MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
    
    
                form.add("files", file);
                form.add("files", file2);
                form.add("usertoken", "test");
                form.add("sendTo", "test);
                form.add("subject", "test");
                form.add("content", "test");
    
                HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(form, httpHeaders);
    
                String serverUrl = "http://localhost:8080/api/mails/send";
    
                List<HttpMessageConverter<?>> httpMessageConverters = new ArrayList<>();
                httpMessageConverters.add(new FormHttpMessageConverter());
                httpMessageConverters.add(new MappingJackson2HttpMessageConverter());
    
                restTemplate().setMessageConverters(httpMessageConverters);
    
    
                restTemplate().postForEntity(serverUrl, requestEntity, String.class);
    
    
            }
    }
    

    @RestController
    @RequestMapping("/api")
    public class MainConroller {
    
        private static final Logger log = LoggerFactory.getLogger(MainConroller.class);
        @Autowired
        private MainService mainService;
    
        public MainConroller(MainService mainService) {
            this.mainService = mainService;
        }
    
        @PostMapping("/mails/send")
        public  void send(
                @RequestParam("usertoken") String usertoken,
                @RequestParam("sendTo") String sendTo,
                @RequestParam("subject") String subject,
                @RequestParam("content") String content,
                @RequestParam(required = false, name = "files") List<MultipartFile> multipartFiles) {
            log.debug("{}, {}, {}, {}", usertoken, sendTo, subject, content);
    
            mainService.processMessage(usertoken, sendTo, subject, content, multipartFiles);
    
        }
    }
    

    当我从客户端发送这个请求时,除了文件之外,所有的东西都会到达服务器端。

    收到请求后,RequestParam文件为空。

    1 回复  |  直到 7 年前
        1
  •  0
  •   mdolbin    7 年前

    没有文件发送,因为没有 HttpMessageConverter java.io.File 另一方面,有一个 ResourceHttpMessageConverter 把各种各样的 Resource ,包括 FileSystemResource .

    附言 FormHttpMessageConverter 默认情况下,在 RestTemplate 创建并 FormHttpMessageConverter格式 也在引擎盖下使用。