Call Another Rest Api From My Server In Spring-Boot


Answer :

This website has some nice examples for using spring's RestTemplate. Here is a code example of how it can work to get a simple object:

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); } 

Instead of String you are trying to get custom POJO object details as output by calling another API/URI, try the this solution. I hope it will be clear and helpful for how to use RestTemplate also,

In Spring Boot, first we need to create Bean for RestTemplate under the @Configuration annotated class. You can even write a separate class and annotate with @Configuration like below.

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

Then, you have to define RestTemplate with @Autowired or @Injected under your service/Controller, whereever you are trying to use RestTemplate. Use the below code,

@Autowired private RestTemplate restTemplate; 

Now, will see the part of how to call another api from my application using above created RestTemplate. For this we can use multiple methods like execute(), getForEntity(), getForObject() and etc. Here I am placing the code with example of execute(). I have even tried other two, I faced problem of converting returned LinkedHashMap into expected POJO object. The below, execute() method solved my problem.

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

Happy Coding :)


Modern Spring 5+ answer using WebClient instead of RestTemplate.

Configure WebClient for a specific web-service or resource as a bean (additional properties can be configured).

@Bean public WebClient localApiClient() {     return WebClient.create("http://localhost:8080/api/v3"); } 

Inject and use the bean from your service(s).

@Service public class UserService {      private static final Duration REQUEST_TIMEOUT = Duration.ofSeconds(3);      private final WebClient localApiClient;      @Autowired     public UserService(WebClient localApiClient) {         this.localApiClient = localApiClient;     }      public User getUser(long id) {         return localApiClient                 .get()                 .uri("/users/" + id)                 .retrieve()                 .bodyToMono(User.class)                 .block(REQUEST_TIMEOUT);     }  } 

Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?