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:
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:
pom.xml
XML
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 <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> <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> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"> <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;@Controllerpublic 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"); 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:
