【问题标题】:clamav-rest Spring 3.2 RestTemplate results in 400 Bad Requestclamav-rest Spring 3.2 RestTemplate 导致 400 错误请求
【发布时间】:2018-06-28 05:12:59
【问题描述】:

我正在尝试将文件发送到 Spring Boot 应用程序clamav-rest。 curl 命令运行良好。这是输出,

curl -k -F name="test file" -F file=@"myfile.pdf" https://clamav.my.org/scan
POST /scan HTTP/1.1 主持人:clamav.my.org 用户代理:curl/7.56.1 接受: */* 内容长度:22834 内容类型:multipart/form-data;边界=------------5814453ea3a5f3e0 期望:100-继续 HTTP/1.1 100 继续 HTTP/1.1 200 正常 日期:格林威治标准时间 2018 年 1 月 18 日星期四 23:19:10 内容类型:text/plain;charset=utf-8 内容长度:21 一切正常:是的

我正在使用 Spring 3.2 进行 REST 调用,这会导致 400 Bad Request 错误。

MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
parts.add("name", "fileUpload.obj");
parts.add("file", in);

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);

HttpEntity<MultiValueMap<String, Object>> requestEntity = 
    new HttpEntity<MultiValueMap<String, Object>>(parts, headers);

ResponseEntity<String> responseEntity = 
    restTemplate.exchange("https://clamav.my.org/scan", HttpMethod.POST, requestEntity, String.class);
String body = (String) responseEntity.getBody();

这是日志输出

为“https://clamav.my.org/scan”创建了 POST 请求 将请求接受标头设置为 [text/plain, application/json, application/*+json, */*] 使用 [org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@4885d075] 将 [{name=[fileUpload.obj], file=[[B@fe97ef91]}] 写为“multipart/form-data” “https://clamav.my.org/scan”的 POST 请求导致 400(错误请求);调用错误处理程序 为“https://clamav.my.org/scan”创建了 POST 请求 将请求接受标头设置为 [text/plain, application/json, application/*+json, */*] 使用 [org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@e8e8b3fa] 编写 [{file=[[B@fe97ef91]}] “https://clamav.my.org/scan”的 POST 请求导致 400(错误请求);调用错误处理程序

我已经尝试了几次迭代并搜索了所有示例代码。关于如何提出成功请求的任何想法? TIA

【问题讨论】:

    标签: java spring resttemplate clam


    【解决方案1】:

    在相关帖子sending-file-over-spring-rest-service-via-resttemplate中找到了答案

    现在是 RestTemplate 调用,

            RestTemplate restTemplate = new RestTemplate();
            FormHttpMessageConverter converter = new FormHttpMessageConverter();
            restTemplate.getMessageConverters().add(converter);
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.MULTIPART_FORM_DATA);
    
            MultipartByteArrayResource resource = new MultipartByteArrayResource(in);
            resource.setFilename("fileUpload.obj");
    
            MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
            parts.add("name", "fileUpload.obj");
            parts.add("file", resource);
    
            HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(parts,
                    headers);
    
            ResponseEntity<String> responseEntity = restTemplate.exchange("https://clamav.my.org/scan",
                    HttpMethod.POST, requestEntity, String.class);
            String body = (String) responseEntity.getBody();
    

    我确信可以改进,但现在可以使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      相关资源
      最近更新 更多