Http-запрос из нескольких файлов с Spring Rest Template приходит без файлов - PullRequest
0 голосов
/ 31 октября 2018

У меня есть этот клиент для отправки http-запросов из нескольких файлов с шаблоном Rest

    @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 Ответ

0 голосов
/ 31 октября 2018

Файлы не отправляются, потому что нет HttpMessageConverter, способного преобразовать java.io.File. С другой стороны, существует ResourceHttpMessageConverter, который преобразует все виды Resource, включая FileSystemResource.

PS FormHttpMessageConverter добавляется по умолчанию при создании RestTemplate и FormHttpMessageConverter также использует его под капотом.

...