/ / Spring - RestTemplate - Plik wieloczęściowy - Java, Spring, Spring-Mvc, Multipart

Spring - RestTemplate - plik wieloczęściowy - java, spring, spring-mvc, multipart

Ten kontroler działa dobrze

@Controller
public class FileUploadController {
....
@PostMapping("/convert")
public void fileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes, HttpServletResponse response) {

Teraz chcę wywołać ten kontroler z innego projektu wiosennego za pośrednictwem RestTemplate. Próbowałem wielu rzeczy, ale zauważyłem, że działa. Oto mój ostatni kod:

@Controller
public class FileController {
....
@PostMapping("/convert")
public void fileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes,
HttpServletResponse response) throws Exception {


ArrayList<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>(
Arrays.asList(new FormHttpMessageConverter(),new MappingJackson2HttpMessageConverter(), new ResourceHttpMessageConverter()));

RestTemplate template = restTemplate();

template.setMessageConverters(converters);

HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.MULTIPART_FORM_DATA);

MultiValueMap<String, Object> multipartRequest = new LinkedMultiValueMap<>();
multipartRequest.add("file", file);

HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(multipartRequest, header);

template.postForObject("http://localhost:8080/convert", requestEntity, String.class);

}

Jeśli zadzwonię do FileUploadController (przez listonosza), to zadziała. Jeśli zadzwonisz do FileController dostaję ten wyjątek

"exception":
"org.springframework.http.converter.HttpMessageNotWritableException",
"message": "Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile]",
"path": "/convert"

Odpowiedzi:

2 dla odpowiedzi № 1

Spójrz na odpowiedź tutaj, powinna być dokładnie tym, czego szukasz: Próba przetestowania usługi spoczynku przy użyciu pliku wieloczęściowego

Problem polega na wysłaniu pliku wieloczęściowego do usługi odpoczynku za pomocą RestTemplate.

Zasadniczo musisz symulować przesyłanie pliku. Możesz spróbować czegoś takiego:

MultiValueMap<String, Object> parameters = new LinkedMultiValueMap<String, Object>();
parameters.add("file", new FileSystemResource("file.jpg"));

HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "multipart/form-data");
headers.set("Accept", "text/plain");

String result = restTemplate.postForObject(
"http://host:port/path",
new HttpEntity<MultiValueMap<String, Object>>(parameters, headers),
String.class);