Open In App

Spring MVC – Last 24 Hour Cryptocurrency Data using REST API

Last Updated : 12 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
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:

 

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

Cryptocurrency

Symbol

Bitcoin btc
Ethereum eth
Tether USDT
XRP XRP
Litecoin LTC

Let us see for eth (Ethereum)

 

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:

 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads