<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
Je suis tombé sur une situation où une API REST a parfois un Content-Type de application / json
ou application / octet-stream
, mais elle renvoie toujours JSON. C'était. À ce stade, si le mappage de la réponse à l'objet Java est application / octat-stream
, une erreur se produira comme indiqué ci-dessous.
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class asdf.springsample.SampleController$MyResponse] and content type [application/octet-stream]
Par défaut, le Spring Converter est mappé sur application / json
, alors ajoutez aussi application / octet-stream
à cela. Référence: [Impossible d'extraire la réponse: aucun HttpMessageConverter approprié trouvé pour le type de réponse](http://www.technicalkeeda.com/spring-tutorials/could-not-extract-response-no-suitable-httpmessageconverter-found-for-response] -type)
RestTemplate r = new RestTemplate();
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM));
r.getMessageConverters().add(mappingJackson2HttpMessageConverter);
RequestEntity<String> request = RequestEntity.post(new URI("http://localhost:8080/a2")).accept(MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM).body("");
ResponseEntity<MyResponse> response = r.exchange(request, MyResponse.class);
Ou, selon l'URL de référence, si vous mettez Apache HttpComponents HttpClient dans le chemin de classe et que vous l'utilisez, il semble que la méthode suivante soit également OK (je n'ai pas essayé cela).
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(HttpClients.createDefault());
RestTemplate restTemplate = new RestTemplate(requestFactory);