web-dev-qa-db-fra.com

Appeler une autre api de repos de mon serveur dans Spring-Boot

Je souhaite appeler une autre api Web de mon serveur sur une demande spécifique de l'utilisateur. Par exemple, je souhaite appeler google FCM send message api pour envoyer un message à un utilisateur spécifique lors d'un événement. 

est Retrofit a une méthode pour y parvenir? ou sinon comment je peux le faire?

28
Kenji

Ce site propose des exemples intéressants d'utilisation de RestTemplate de Spring. Voici un exemple de code montrant comment cela peut fonctionner pour obtenir un objet simple:

private static void getEmployees()
{
    final String uri = "http://localhost:8080/springrestexample/employees.xml";

    RestTemplate restTemplate = new RestTemplate();
    String result = restTemplate.getForObject(uri, String.class);

    System.out.println(result);
}
41
Torsten N.

Au lieu de String, vous essayez d'obtenir les détails d'objet POJO personnalisés en sortie en appelant une autre API/URI , essayez cette solution. J'espère que ce sera clair et utile pour savoir comment utiliser RestTemplate aussi,

Dans Spring Boot , nous devons d’abord créer un bean pour RestTemplate sous la classe @Configuration annotated. Vous pouvez même écrire une classe séparée et annoter avec @Configuration comme ci-dessous.

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
       return builder.build();
    }
}

Ensuite, vous devez définir RestTemplate avec @Autowired ou @Injected sous votre service/contrôleur, partout où vous essayez d'utiliser RestTemplate. Utilisez le code ci-dessous,

@Autowired
private RestTemplate restTemplate;

Voyons maintenant comment appeler une autre API à partir de mon application en utilisant RestTemplate créé ci-dessus. Pour cela, nous pouvons utiliser plusieurs méthodes telles que execute () , getForEntity () , getForObject () and etc. J'ai même essayé deux autres, j'ai eu un problème de conversion de LinkedHashMap retourné en objet POJO attendu. La méthode execute () ci-dessous a résolu mon problème.

ResponseEntity<List<POJO>> responseEntity = restTemplate.exchange(URL, HttpMethod.GET, null, new ParameterizedTypeReference<List<POJO>>() {
});
List<POJO> pojoObjList = responseEntity.getBody();

Bonne codage :)

0
Nallamachu