Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Java Arrays
  • Java Strings
  • Java OOPs
  • Java Collection
  • Java 8 Tutorial
  • Java Multithreading
  • Java Exception Handling
  • Java Programs
  • Java Project
  • Java Collections Interview
  • Java Interview Questions
  • Java MCQs
  • Spring
  • Spring MVC
  • Spring Boot
  • Hibernate
Open In App
Next Article:
Spring MVC - Get Exchange Rate Values using REST API
Next article icon

Spring MVC - Get Exchange Rate Values using REST API

Last Updated : 29 Jul, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

People are doing business, and developing software for geographical locations. That means the calculation of a software price will vary globally. During those scenarios, we need to know about the exchange rates for a given currency. Nowadays many open source REST API calls are available and among that there is a call available to get exchange rates as well

https://api.exchangerate-api.com/v4/latest/<Any currency we need to give here>

Example:

https://api.exchangerate-api.com/v4/latest/INR

Corresponding JSON Output:

 

Using Spring MVC, we can retrieve the JSON response that got from the REST API call and render it on our pages. Via a maven-driven project, let us do that. So, let us start with the full project structure and pom.xml file.

Step by Step Implementation

Project Structure:

Project Structure
 

pom.xml

XML
<project xmlns="http://maven.apache.org/POM/4.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0                          http://maven.apache.org/maven-v4_0_0.xsd">     <modelVersion>4.0.0</modelVersion>     <groupId>com.exchangeRate.exchangeRate_Rest_API</groupId>     <artifactId>exchangeRate_Rest_API</artifactId>     <packaging>war</packaging>     <version>0.0.1-SNAPSHOT</version>     <name>profileGenerator</name>     <url>http://maven.apache.org</url>     <properties>         <failOnMissingWebXml>false</failOnMissingWebXml>         <spring-version>5.1.0.RELEASE</spring-version>     </properties>     <dependencies>         <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-webmvc</artifactId>             <version>${spring-version}</version>         </dependency>         <dependency>             <groupId>org.springframework</groupId>             <artifactId>spring-test</artifactId>             <version>${spring-version}</version>         </dependency>         <!-- JSTL Dependency -->         <dependency>             <groupId>javax.servlet.jsp.jstl</groupId>             <artifactId>javax.servlet.jsp.jstl-api</artifactId>             <version>1.2.1</version>         </dependency>         <dependency>             <groupId>taglibs</groupId>             <artifactId>standard</artifactId>             <version>1.1.2</version>         </dependency>         <!-- Servlet Dependency -->         <dependency>             <groupId>javax.servlet</groupId>             <artifactId>javax.servlet-api</artifactId>             <version>3.1.0</version>             <scope>provided</scope>         </dependency>         <!-- JSP Dependency -->         <dependency>             <groupId>javax.servlet.jsp</groupId>             <artifactId>javax.servlet.jsp-api</artifactId>             <version>2.3.1</version>             <scope>provided</scope>         </dependency>         <dependency>             <groupId>com.google.code.gson</groupId>             <artifactId>gson</artifactId>             <version>2.8.6</version>         </dependency>         <dependency>             <groupId>commons-io</groupId>             <artifactId>commons-io</artifactId>             <version>2.5</version>         </dependency>         <dependency>             <groupId>junit</groupId>             <artifactId>junit</artifactId>             <version>4.12</version>             <scope>test</scope>         </dependency>     </dependencies>     <build>         <finalName>ExchangeRate</finalName>         <sourceDirectory>src/main/java</sourceDirectory>         <plugins>             <plugin>                 <artifactId>maven-compiler-plugin</artifactId>                 <version>3.5.1</version>                 <configuration>                     <source>1.8</source>                     <target>1.8</target>                 </configuration>             </plugin>             <!-- This should be added to overcome Could not initialize class                   org.apache.maven.plugin.war.util.WebappStructureSerializer -->             <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-war-plugin</artifactId>                 <version>3.3.2</version>             </plugin>         </plugins>     </build> </project> 

Invocation file : getExchangeRates.jsp

HTML
<!DOCTYPE html> <html lang="en"> <head>     <meta charset="utf-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1">     <title>ExchangeRate</title>     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>     <style type="text/css">         .main-form, .profile-area {             width: 500px;         }         .main-form {             margin: 50px auto 0px;         }         .profile-area {             margin: 10px auto;         }         .main-form section, .profile-area section {             margin-bottom: 15px;             background: #33FFF9;             box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);         }         .main-form section {             padding: 30px;         }         .profile-area section {             padding: 30px 30px 30px;         }         .profile-area section > div {             text-align: center;         }         .main-form h3 {             margin: 0 0 15px;         }         .form-control, .btn {             min-height: 38px;             border-radius: 2px;         }         .btn {             font-size: 15px;             font-weight: bold;         }         .hideElement {             display: none;         }     </style> </head> <body> <div class="main-form" id="main-form">     <section>         <h5 class="text-center">Enter your currency</h5>         <div class="form-group">             <input id="currency" type="text" class="form-control" placeholder="Enter currency here..." required="required">         </div>         <div class="form-group">             <button onclick="loadData()" class="btn btn-primary btn-block">Find ExchangeRate Details</button>         </div>     </section> </div> <div class="profile-area hideElement" id="profile-area">     <section>         <div id="loader" class="hideElement">             <div class="spinner-border" role="status">                 <span class="sr-only">Loading...</span>             </div>         </div>         <div id="profile" class="hideElement">             <br><br>              <p><strong>Indian Currency(INR) : </strong><span id="INR"></span></p>               <p><strong>British Pound(GBP)    : </strong><span id="GBP"></span></p>               <p><strong>Euro(Euro)               : </strong><span id="EUR"></span></p>          </div>     </section> </div> </body> <script>     function loadData() {         document.getElementById("profile-area").classList.remove("hideElement");         document.getElementById("loader").classList.remove("hideElement");         document.getElementById("profile").classList.add("hideElement");          var currency = document.getElementById("currency").value;          var otherCurrency1,otherCurrency2;         if(currency != "" && currency != null) {             var xhttp = new XMLHttpRequest();             xhttp.onreadystatechange = function() {                 if (this.readyState == 4 && this.status == 200) {                     var jsonResponse = JSON.parse(this.responseText);                     document.getElementById("INR").innerHTML = jsonResponse.INR;                     document.getElementById("GBP").innerHTML = jsonResponse.GBP;                     document.getElementById("EUR").innerHTML = jsonResponse.EUR;                     document.getElementById("loader").classList.add("hideElement");                     document.getElementById("profile").classList.remove("hideElement");                 }             };             xhttp.open("GET", "getExchangeRateDetailsByCurrency?currency=" + currency, true);             xhttp.send();             console.log("done");         } else {             console.log("Enter currency...")         }     } </script> </html> 

Output:

Output
 

Let us try to give INR in the place of entering currency here

Output
 
Output
 
Output
 

Now let us see the important java files for getting the exchange rate values

AppConfig.java

Java
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView;  @Configuration @EnableWebMvc @ComponentScan(basePackages = { "com.exchangeRate.exchangeRate_Rest_API" }) public class AppConfig {     @Bean     public InternalResourceViewResolver resolver() {         InternalResourceViewResolver resolver = new InternalResourceViewResolver();         resolver.setViewClass(JstlView.class);         resolver.setPrefix("/");         resolver.setSuffix(".jsp");         return resolver;     } } 

SpringMvcDispatcherServletInitializer.java

Java
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;  public class SpringMvcDispatcherServletInitializer            extends AbstractAnnotationConfigDispatcherServletInitializer {          @Override     protected Class<?>[] getRootConfigClasses() {         return null;     }       @Override     protected Class<?>[] getServletConfigClasses() {         return new Class[] { AppConfig.class };     }       @Override     protected String[] getServletMappings() {         return new String[] { "/" };     }     } 

ExchangeRateController.java

Java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.StringTokenizer; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.google.gson.Gson; import com.google.gson.JsonObject;  @Controller public class ExchangeRateController {      @RequestMapping("/getExchangeRateDetailsByCurrency")     public @ResponseBody     JsonObject getExchangeRateDetails(String  currency) throws IOException {          JsonObject jsonObject = new JsonObject();         String data = getExchangeRateData(currency);         data = data.replaceAll("^\"|\"$", "");         StringTokenizer jsonTokenizer = new StringTokenizer(data,",");         String internalData[];         String expectedExchangeRateOutput = null;         ArrayList otherCurrencies = new ArrayList();                  // Here given provisions to get the          // value of GBP and EUR for INR         if (currency.equalsIgnoreCase("INR")) {             otherCurrencies.add("GBP");             otherCurrencies.add("EUR");         }                // Here given provisions to get the          // value of INR and EUR for GBP         if (currency.equalsIgnoreCase("GBP")) {             otherCurrencies.add("INR");             otherCurrencies.add("EUR");         }                // Here given provisions to get the value         // of GBP and INR for EUR         if (currency.equalsIgnoreCase("EUR")) {             otherCurrencies.add("INR");             otherCurrencies.add("GBP");         }         while (jsonTokenizer.hasMoreTokens()) {               expectedExchangeRateOutput = jsonTokenizer.nextToken();             internalData = StringUtils.split(expectedExchangeRateOutput,":");             System.out.println(internalData[0]+internalData[1]);             if (internalData[0].substring(2,internalData[0].length()-1).equalsIgnoreCase(currency)) {                 jsonObject.addProperty(currency, internalData[1]);                             }             if (internalData[0].substring(1,internalData[0].length()-1).equalsIgnoreCase(otherCurrencies.get(0).toString())) {                 jsonObject.addProperty(otherCurrencies.get(0).toString(), internalData[1]);             }             if (internalData[0].substring(1,internalData[0].length()-1).equalsIgnoreCase(otherCurrencies.get(1).toString())) {                 jsonObject.addProperty(otherCurrencies.get(1).toString(), internalData[1]);             }         }           return jsonObject;     }      private String getExchangeRateData(String currency) throws IOException {         String data = null;         StringBuilder responseData = new StringBuilder();         JsonObject jsonObject = null;         URL url = null;         url = new URL("https://api.exchangerate-api.com/v4/latest/" + currency);                 HttpURLConnection con = (HttpURLConnection) url.openConnection();         con.setRequestMethod("GET");         con.setRequestProperty("User-Agent", "Mozilla/5.0");         int responseCode = con.getResponseCode();         System.out.println("\nSending 'GET' request to URL : " + url);         // System.out.println("Response Code : " + responseCode);         try (BufferedReader in = new BufferedReader(                 new InputStreamReader(con.getInputStream()))) {             String line;             while ((line = in.readLine()) != null) {                 responseData.append(line);             }             jsonObject = new Gson().fromJson(responseData.toString(), JsonObject.class);                          data = jsonObject.get("rates").toString();          }         // System.out.println(data);         return data;     } } 

For rendering different exchange rate values, we need to modify the ExchangeRateController.java file according to our needs.

Conclusion

REST APIs are independent and highly scalable. Hence it can be consumed in web technologies like Java, JSP, Spring combinations, or other platforms too. Similarly, as it is providing the response as JSON, it is highly supportive to prepare android applications as well as IOS applications. In a way, we can say that world has shrunk and quick responses are available from many open-source REST API calls.


Next Article
Spring MVC - Get Exchange Rate Values using REST API

P

priyarajtt
Improve
Article Tags :
  • Java
  • Project
  • Java-Spring-MVC
Practice Tags :
  • Java

Similar Reads

    Spring - MVC Form Checkbox
    In this article, we will learn about the Spring MVC Checkbox and Checkboxes tags. We will create a basic Spring MVC project in the Spring tool suite(STS) to create checkboxes using form:checkbox and form:checkboxes tags. 'spring-form.tld' tag library In Spring Framework, we can use Java Server Pages
    6 min read
    Spring - MVC Form Radio Button
    Here, we will learn about the Spring MVC radiobutton and radiobuttons tags. We will create a basic Spring MVC project in the Spring tool suite(STS) to create radiobuttons using form:radiobutton and form:radiobuttons tags. 'spring-form.tld' tag libraryIn Spring Framework, we can use Java Server Pages
    8 min read
    Spring - MVC Form Drop-Down List
    In this article, we will learn about the Spring MVC Dropdown list. We will create a basic Spring MVC project in Spring tool suite(STS) to make a dropdown list using form:select tag. spring-form.tld We can use Java Server Pages (JSPs) as a view component in Spring Framework. To help you implement vie
    7 min read
    Spring - MVC TextArea
    Here we will be learning about the Spring MVC TextArea form tag. We will create a basic Spring MVC project in the Spring tool suite(STS) to get some data from the user using the TextArea form tag.  spring-form.tld We can use Java Server Pages (JSPs) as a view component in Spring Framework. To help y
    7 min read
    Spring - MVC Hidden Field
    Spring is one of the most popular Java EE frameworks. It is an open-source lightweight framework that allows Java EE 7 developers to build simple, reliable, and scalable enterprise applications. This framework mainly focuses on providing various ways to help you manage your business objects. In this
    6 min read
    Spring - MVC Regular Expression Validation
    Regular Expression Validation in Spring MVC can be achieved by using Hibernate Validator which is the implementation of Bean Validation API. Hibernate Validator provides @Pattern annotation which is used for regular expression validation. Syntax: @Pattern(regex="", flag="", message="") private Strin
    4 min read
    Spring - MVC Password
    Spring is one of the most popular Java EE frameworks. It is an open-source lightweight framework that allows Java EE 7 developers to build simple, reliable, and scalable enterprise applications. This framework mainly focuses on providing various ways to help you manage your business objects. In this
    8 min read
    Spring - MVC Form Tag Library
    Spring Framework provides spring's form tag library for JSP views in Spring's Web MVC framework. In Spring Framework, we use Java Server Pages(JSP) as a view component to interact with the user. From version 2.0, Spring Framework provides a comprehensive set of data binding-aware tags. These tags ar
    14 min read
    Spring - MVC Form Text Field
    Spring is one of the most popular Java EE frameworks. It is an open-source lightweight framework that allows Java EE 7 developers to build simple, reliable, and scalable enterprise applications. This framework mainly focuses on providing various ways to help you manage your business objects. In this
    8 min read
    Spring - MVC Validation
    The Spring MVC framework provides us with standard predefined validators to validate user input data in a simple and straightforward way. The Bean Validation API is the popular approach for data validations in Spring applications. Here we will be using the hibernate implementation of the Bean Valida
    5 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences