Http Post ile belirtilen sınıfı gönderir.
- Birinci paramtre hedef url
- İkinci parametre data + header bilgisi içeren HttpEntity nesnesi
- Üçüncü parametre döndürülecek sonuç nesnesinin T tipidir. Yani Sonuç ResponseEntity<T> tipindendir. Dönüş tipi ResponseEntity<MsToken>, ResponseEntity<String> gibi bir şey olabilir
Örnek - Form Post Etmek
Login olmak için şöyle yaparız. Data MultiValueMap içine doldurulur. Dönüş tipi String
HttpHeaders httpHeaders = new HttpHeaders(); //HeadershttpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED_TYPE);httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
MultiValueMap<String,Object> parameters = new LinkedMultiValueMap<> (); //Dataparameters.add("username",username);parameters.add("password",password);parameters.add("remember-me",true);
HttpEntity<MultiValueMap<String,Object>> httpEntity = new HttpEntity
(parameters,httpHeaders);RestTemplate restTemplate = new RestTemplate();try{ ResponseEntity<String> responseEntity = restTemplate.postForEntity
("http:.../login",httpEntity,String.class); HttpHeaders header = responseEntity.getHeaders(); ...} catch(RestClientException ex){ ...}
Örnek - Form Post Etmek
Şöyle yaparız
private MsToken getToken() {
// create client
final RestTemplate restTemplate = new RestTemplate();
// prepare header
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
// prepare form data
final MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("grant_type", "client_credentials");
map.add("client_id", appId);
map.add("client_secret", appPassword);
map.add("scope", "https://api.botframework.com/.default");
// prepare request
final HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map,headers);
// execute call
final ResponseEntity<MsToken> response = restTemplate
.postForEntity(MS_LOGIN_URL, request, MsToken.class);
return response.getBody();
}
Örnek - MULTIPART_FORM_DATA Post Etmek
Şöyle yaparız. Data MultiValueMap içine doldurulur
public void postData(String firstname, String lastname, String fileName,
byte[] fileContents) {HttpHeaders headers = new HttpHeaders();// Set Content Type to multipart/form-dataheaders.setContentType(MediaType.MULTIPART_FORM_DATA);MultiValueMap<String, Object> data = new LinkedMultiValueMap<>();try {// Put form datadata.add("firstname", firstname); //1data.add("lastname", lastname); //2// Put image dataByteArrayResource fileData = new ByteArrayResource(fileContents) {// This override is required because the default method returns null.@Overridepublic String getFilename() {return fileName;}};HttpHeaders parts = new HttpHeaders();final HttpEntity<ByteArrayResource> imageEntity = new HttpEntity<>(fileData, parts);data.add("image", imageEntity); //3// POST form dataHttpEntity<MultiValueMap<String, Object>> requestEntity =
new HttpEntity<>(data, headers);restTemplate.postForEntity(applicationProperties.getDocumentUploadUri(),
requestEntity, String.class);} catch (Exception e) {e.printStackTrace();}}
Örnek - JSON Post Etmek
Boş bir json post göndermek için şöyle yaparız. Burada ResponseEntity<String> olarak kodladık. Karşı taraf ise boolean dönüyor. ResponseEntity nesnesinin body metodu "true" veya "false" değeri taşır.String destinationPort = "8090";
RestTemplate restTemplate = new RestTemplate();
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<> (httpHeaders);
String url ="http://localhost:{port}/foo/bar"
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url,entity,
String.class,destinationPort);
if (responseEntit.getStatusCode() == HttpStatus.OK){
...
}
Bu kod @RequestParam veya @RequestBody verisi göndermez. Şu kodu tetikler@PostMapping(value="bar")
public boolean bar(){
...
}
Aynı şeyi exchange() ile yapmak isteseydik şöyle yapardıkResponseEntity<String> responseEntity = restTemplate.exchange(url,HttpMethod.POST,entity,
String.class,destinationPort);
Hiç yorum yok:
Yorum Gönder