Home > Blockchain >  When trying to invoke rest API throws httpmediatypenotsupportedexception content type 'applicat
When trying to invoke rest API throws httpmediatypenotsupportedexception content type 'applicat

Time:02-04

I am trying to invoke rest API below  which consumes a multi-part file. First paramter  is  a MultipartFile and second is s String. and this functions processes some business logic 

@PostMapping( value="/uploadFile", consumes = MediaType.MULTIPART_FORM_DATE_VALUE)
public ResponseEntity<String> upload(@RequestPart("file") MultipartFile file,
@RequestParam("path") String path){

//businness logic
}



  

Invoking above API from code below. But it throws
httpmediatypenotsupportedexception content type 'application/x-www-form-urlencoded' not supported. I have also tried added header "Content-type", MediaType.MULTIPART_FORM_DATA_VALUE OR "Content-Type", "multipart/form-data" OR "Accept", "multipart/form-data" in the headers below, but that has not helped either

public void uploadFile() {

Path path = Paths.get("C:/ABC.txt"); 
byte[] content = null;

try{
    content =  Files.readAllBytes(path);   // All file is read in content variable 
} catch(final IOException e){
}

MultipartFile file = new MockMultipartFile("ABC.txt",content);
    

UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(oauthURL);
urlBuilder.queryParam("file", file);
urlBuilder.queryParam("path", "/temp);

HttpHeaders headers = new HttpHeaders();
HttpEntity<String> response = null;
HttpEntity<?> entity = new HttpEntity<>(headers);

try{
response = restTemplate.exchange(urlBuilder.build().encode().toUri(), HttpMethod.POST, entity. String.class);
}
catch (Exception e){
}
}



}

CodePudding user response:

Your server accepts (consumes) "multipart/form-data" however you are sending the file and path in the URL. This will always result in a "application/x-www-form-urlencoded".

So you need to change the server to accept it as you send them or send the file and path as the body (within the entity)

EDIT (some code to show how):

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

MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("file", file);
body.add("path","/temp");
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
response = restTemplate.postForEntity(serverUrl, requestEntity, String.class);
  • Related