简体   繁体   中英

Call another rest api from own rest api in spring boot application

I am learning Spring Boot, I have managed to deploy an API on my computer which fetches data from Oracle and when I paste the link http://localhost:8080/myapi/ver1/table1data in browser it returns me the data. Below is my controller code:

@CrossOrigin(origins = "http://localhost:8080")
@RestController
@RequestMapping("/myapi/ver1")
public class Table1Controller {


    @Autowired
    private ITable1Repository table1Repository;

    @GetMapping("/table1data")
    public List<Table1Entity> getAllTable1Data() {
        return table1Repository.findAll();
    }

Now this scenario is working fine. I want to do another thing. There is an APIhttps://services.odata.org/V3/Northwind/Northwind.svc/Customers which returns some customers data. Does spring boot provide any way so that I can re-host/re-deploy this API from my own controller such that instead of hitting this the abovelink in the browser, I should hit http://localhost:8080/myapi/ver1/table1data and it will return me the same customers data.

Yes the spring boot provides a way to hit an external URL from your app via a RestTemplate. Below is a sample implementation of getting the response as string or you can also use a data structure of desired choice depending on the response,

@RestController
@RequestMapping("/myapi/ver1")
public class Table1Controller {

   @Autowired
   private RestTemplate restTemplate;

   @GetMapping("/table1data")
   public String getFromUrl() throws JsonProcessingException {
        return restTemplate.getForObject("https://services.odata.org/V3/Northwind/Northwind.svc/Customers",
            String.class);
   }
}

You can create a config class to define the Bean for the rest controller. Below is the snippet,

@Configuration
public class ApplicationConfig{

   @Bean
   public RestTemplate restTemplate() {
       return new RestTemplate();
   }

}

You can use RestTemplate for third party API call and return the response from your API

final String uri = "https://services.odata.org/V3/Northwind/Northwind.svc/Customers";

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

This website has some nice examples for using spring's RestTemplate

Create a @Bean of RestTemplate

 @Bean
 public RestTemplate restTemplate() {
     return new RestTemplate();
 }

By using the above RestTemplate you can fetch the data from ur own localhost

  String url = "https://services.odata.org/V3/Northwind/Northwind.svc/Customers";
  restTemplate.getForObject(url,String.class);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM