The Wayback Machine - https://web.archive.org/web/20240213201541/https://www.geeksforgeeks.org/spring-mvc-last-24-hour-cryptocurrency-data-using-rest-api/
Open In App
Related Articles

Spring MVC – Last 24 Hour Cryptocurrency Data using REST API

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Report issue
Report

Cryptocurrencies are a hot topic now and in the future; they may also be a payment source. Hence a lot of research is getting done. Many REST APIs are available to provide data in JSON format. We are going to see one such REST API as

https://api.wazirx.com/sapi/v1/ticker/24hr?symbol=<Need to provide the symbol of cryptocurrency>

Example: 

https://api.wazirx.com/sapi/v1/ticker/24hr?symbol=ethinr

JSON Response:

JSON Response

 

Let us see how to get a JSON response and render it in JSP pages via a Spring MVC project. Project is prepared as a maven project.

Project Structure:

Project Structure

 

pom.xml

XML

    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.lasttwentyfour.cryptodata</groupId>
    <artifactId>lasttwentyfourcryptodataRestAPI</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>lasttwentyfourcryptodataRestAPI</name>
    <url>http://maven.apache.org</url>
    <properties>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <spring-version>5.1.0.RELEASE</spring-version>
    </properties>
    <dependencies>
        <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>LastTwentyFourDetails</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>

                    

JSP page that is necessary for invocation

lastTwentyFourCryptoData.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>Last Twenty Four Cryptocurrency Data</title>
    <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: #ffb891;
            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;
            font-family: verdana;
        }
        .hideElement {
            display: none;
        }
        table, th, td {
  border: 1px solid white;
  border-collapse: collapse;
}
th, td {
  background-color: #a0e040;
}
    </style>
</head>
<body>
<div class="main-form" id="main-form">
    <section>
        <h5 class="text-center">Enter a Cryptocurrency to know about its 24 hour data </h5>
        <div class="form-group">
            <input id="symbol" type="text" class="form-control" placeholder="Enter a Cryptocurrency(btc/eth/icx/bnb etc) ..." required="required">
        </div>
        <!--
        <h5 class="text-center">Enter a comparison Cryptocurrency </h5>
        <div class="form-group">
            <input id="tsyms" type="text" class="form-control" placeholder="Enter a comparison Cryptocurrency ..." required="required">
        </div> -->
        <div class="form-group">
            <button onclick="loadData()" class="btn btn-primary btn-block">Fetch 24 Hours Crypto Data</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">
        <center>
            <table border = "2" col>
            <tr>
                <th><strong><span id="cryptosymbol">   </span> Price In INR </strong></th>
            </tr>
            <tr><td><strong>OpenPrice : <span id="openPrice"></span></strong></td></tr>
            <tr><td><strong>LastPrice : <span id="lastPrice"></span></strong></td></tr>
            <tr><td><strong>BidPrice : <span id="bidPrice"></span></strong></td></tr>
                 
            </table>
            </center>
        </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 symbol = document.getElementById("symbol").value;
        if(symbol != "" && symbol != null) {
            var xhttp = new XMLHttpRequest();
            xhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    var jsonResponse = JSON.parse(this.responseText);
                    document.getElementById("cryptosymbol").innerHTML = jsonResponse.cryptosymbol
                    ;
                    document.getElementById("openPrice").innerHTML = jsonResponse.openPrice;
                    document.getElementById("lastPrice").innerHTML = jsonResponse.lastPrice;
                    document.getElementById("bidPrice").innerHTML = jsonResponse.bidPrice;
                    document.getElementById("loader").classList.add("hideElement");
                    document.getElementById("profile").classList.remove("hideElement");
                }
            };
            xhttp.open("GET", "getCryptodataForLastTwentyFour?cryptoSymbol=" + symbol + "inr", true);
             
            xhttp.send();
            console.log("done");
        } else {
            console.log("Enter a cryptocurrency...")
        }
    }
</script>
</html>

                    

Output:

Image

 

Let us provide any symbol of cryptocurrencies. A few examples are provided in the below table.

Cryptocurrency

Symbol

Bitcoinbtc
Ethereumeth
TetherUSDT
XRPXRP
LitecoinLTC

Let us see for eth (Ethereum)

Image

 

Important java files that need to be looked

AppConfig.java

Java

package com.lasttwentyfour.cryptodata.config;
 
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.lasttwentyfour.cryptodata" })
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

package com.lasttwentyfour.cryptodata.config;
 
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[] { "/" };
    }
  
}

                    

CryptocurrencyLastTwentyFourHourController.java

Java

package com.lasttwentyfour.cryptodata.controller;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
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 CryptocurrencyLastTwentyFourHourController {
    @RequestMapping("/getCryptodataForLastTwentyFour")
    public @ResponseBody
    JsonObject getCryptodataForLastTwentyFour(String cryptoSymbol) throws IOException {
 
        JsonObject jsonObject = new JsonObject();
        jsonObject = getCryptoDetailsForLastTwentyFour(cryptoSymbol);
        String data = jsonObject.toString().replaceAll("^\"|\"$", "");
        StringTokenizer jsonTokenizer = new StringTokenizer(data,",");
        String internalData[];
        String expectedCryptocurrencyOutput = null;       
        while (jsonTokenizer.hasMoreTokens()) { 
            expectedCryptocurrencyOutput = jsonTokenizer.nextToken();
            internalData = StringUtils.split(expectedCryptocurrencyOutput,":");
            System.out.println(internalData[0]+internalData[1]);
            if (internalData[0].substring(1,internalData[0].length()-1).equalsIgnoreCase("baseAsset")) {
                jsonObject.addProperty("cryptosymbol",internalData[1].substring(1,internalData[1].length()-1));
                 
            }
            if (internalData[0].substring(1,internalData[0].length()-1).equalsIgnoreCase("openPrice")) {
                jsonObject.addProperty("openPrice",internalData[1].substring(1,internalData[1].length()-1));
            }
            if (internalData[0].substring(1,internalData[0].length()-1).equalsIgnoreCase("lastPrice")) {
                jsonObject.addProperty("lastPrice",internalData[1].substring(1,internalData[1].length()-1));
            }
            if (internalData[0].substring(1,internalData[0].length()-1).equalsIgnoreCase("bidPrice")) {
                jsonObject.addProperty("bidPrice",internalData[1].substring(1,internalData[1].length()-1));
            }
       
        }
        return jsonObject;
    }
 
    private JsonObject getCryptoDetailsForLastTwentyFour(String cryptoSymbol) throws IOException {
        StringBuilder responseData = new StringBuilder();
        JsonObject jsonObject = null;
 
        URL url = null;
         
        // url = new URL("https://api.wazirx.com/sapi/v1/tickers/24hr");
        url = new URL("https://api.wazirx.com/sapi/v1/ticker/24hr?symbol="+cryptoSymbol);
 
        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);
             
        }
        System.out.println(jsonObject);
        return jsonObject;
    }
}

                    

Another Example:

Image

 


Feeling lost in the vast world of Backend Development? It's time for a change! Join our Java Backend Development - Live Course and embark on an exciting journey to master backend development efficiently and on schedule.
What We Offer:

  • Comprehensive Course
  • Expert Guidance for Efficient Learning
  • Hands-on Experience with Real-world Projects
  • Proven Track Record with 100,000+ Successful Geeks

Last Updated : 12 Apr, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads
Complete Tutorials