web-dev-qa-db-fra.com

restTemplate.getforobject (), exchange (), entity (). existe-t-il des avantages et des inconvénients pour chaque méthode?

j'ai utilisé à la fois entity (), exchange () et getforObject (), et tout semble bien fonctionner. mais je ne sais pas quelle est la méthode idéale pour différents scénarios .. donnez plus d'informations sur chaque méthode, comme le pour et le contre, où utiliser et où ne pas utiliser.

4
benny

Vous pouvez réellement parcourir les docs de RestTemplate pour comprendre le but de ces méthodes. Il n'y a pas de pour et de contre. Chaque méthode sert son propre but.

getforObject(): envoie une demande HTTP GET, renvoyant un objet mappé à partir d'un corps de réponse

 @RequestMapping(value="/{id}", method=RequestMethod.GET)
    public @ResponseBody Employee employeeById(@PathVariable long id) {
       return employeeRepository.findEmp(id);
    }

si le référentiel ne trouve aucun employé pour un identifiant donné, la réponse null sera envoyée avec le statut 200(OK). Mais en réalité, il y avait un problème. Les données n'ont pas été trouvées. Au lieu d'envoyer 200(OK), il aurait dû envoyer 404(Not Found). Ainsi, l’un des moyens consiste à envoyer ResponseEntity (qui contient davantage de métadonnées (en-têtes/codes d’état) liées à la réponse.)

@RequestMapping(value="/{id}", method=RequestMethod.GET)
 public ResponseEntity<Employee> employeeById(@PathVariable long id) {
   Employee employee = employeeRepository.findEmp(id);
   HttpStatus status = HttpStatus.NOT_FOUND;
   if(employee != null ){
     status = HttpStatus.OK; 
   }       
   return new ResponseEntity<Employee>(employee, status);
}

Ici, le client viendra connaître le statut exact de sa demande.

exchange: Exécute une méthode HTTP spécifiée sur une URL, renvoyant une variable ResponseEntity contenant un objet mappé à partir du corps de la réponse.

2
amdg

La documentation de la méthode est très claire:

échange:

Exécutez la méthode HTTP sur le modèle d'URI donné en écrivant l'entité de requête donnée à la requête et renvoie la réponse sous la forme ResponseEntity. Les variables de modèle d'URI sont développées à l'aide de la donnée Variables d'URI, le cas échéant.

getForObject:

Récupérez une représentation en effectuant une opération GET sur l'URL spécifiée. Le la réponse (le cas échéant) est convertie et renvoyée. Variables de modèle d'URI sont développés en utilisant les variables d’URI données, le cas échéant.

getForEntity:

Récupérez une entité en effectuant une opération GET sur l'URL spécifiée. La réponse est converti et stocké dans une ResponseEntity. Variables de modèle d'URI sont développés en utilisant les variables d’URI données, le cas échéant.

Le point important ici est que, la méthode RestTemplate et la méthode de requête Http soient la même logique. Les méthodes get, GetForEntity et getForObject de GET peuvent être utilisées. À la différence de ces méthodes, la réponse getForEntity est convertie et stockée dans un ResponseEntity . D'autre part, la réponse getForObject est convertie en n'importe quelle classe.Exchange et execute utilise un type de retour http request.exchange à la valeur ResponseEntity<T>, tandis que la commande execute est à T.

1
Ugur Atci