web-dev-qa-db-fra.com

Définition du type de contenu d'en-tête de demande sur json dans Spring Framework resttemplate

J'apprends Spring Framework pour créer un client d'un service Web REST qui utilise l'authentification de base et échange JSON. Après de nombreuses recherches sur le Web, j'ai écrit du code qui fonctionnait (ci-dessous), mais maintenant, j'obtiens une erreur "Type de support non pris en charge" car les demandes sont envoyées avec du texte de type Content/plain plutôt qu'avec application/json. Je n'ai rien trouvé sur le Web qui montre comment définir Content-Type dans l'en-tête de la demande (sans se perdre complètement dans les mauvaises herbes) Mon code est:

import org.Apache.http.auth.AuthScope;
import org.Apache.http.auth.UsernamePasswordCredentials;
import org.Apache.http.client.HttpClient;
import org.Apache.http.impl.client.BasicCredentialsProvider;
import org.Apache.http.impl.client.HttpClientBuilder;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

...

BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("login", "password"));
HttpClient httpClient = HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider).build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);

RestTemplate restTemplate = new RestTemplate(requestFactory);
String url = "http://Host:8080/path/";
String postBody = getPostInput("filename");
jsonString = restTemplate.postForObject(path, postBody, String.class);

Tout conseil serait grandement apprécié.

Merci, George

22
user2752012

vous pouvez essayer d'utiliser n'importe quelle méthode du code ci-dessous

1

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

HttpEntity<String> entity = new HttpEntity<String>(postBodyJson ,headers);
restTemplate.put(uRL, entity);

2

RequestEntity<String> requestEntity = RequestEntity .post(new URL(attributeLookupUrl).toURI()) .contentType(MediaType.APPLICATION_JSON) .body(postBodyJson); 
restTemplate.exchange(requestEntity, responseClass);

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

// if you need to pass form parameters in request with headers.
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("username", userName);
map.add("password", password);

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
ResponseEntity<TokenVO> responses = restTemplate.postForEntity(URL, request, responseClass);
56
ManojP