0
点赞
收藏
分享

微信扫一扫

Java 新手如何使用Spring MVC RestAPI 的加密?

Java 新手如何使用Spring MVC RestAPI 的加密?_html

Java 新手如何使用Spring MVC RestAPI 的加密?

如今,REST API 可用很多。由于cryptocurrencies是时下的热门话题,总是需要对不同的cryptocurrencies进行比较,并得到不同币种对应的价值。作为示例,我们将 REST API 调用作为

https://min-api.cryptocompare.com/data/price?fsym=LTC&tsyms=BTC,USD,EUR,INR

这里 fym 代表我们需要当前价格的货币 tsyms 代表另一种货币,其中美元、欧元和印度卢比是货币符号,我们得到相应货币的价格值。

输出为 JSON 格式:

Java 新手如何使用Spring MVC RestAPI 的加密?_java_02

 

让我们看看一些货币及其符号

货币

符号

Bitcoin

BTC

Ethereum

ETH

Litecoin

LTC

Zcash

ZEC

Iota

MIOTA

好的,现在让我们开始准备 Spring MVC 项目并以我们想要的方式呈现 JSON 响应。

执行

项目结构:

Java 新手如何使用Spring MVC RestAPI 的加密?_html_03


 

这是一个maven驱动的项目

pom.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.cryptocurrencycompare.cryptocurrencycompare_Rest_API</groupId>
	<artifactId>cryptocurrencycompare_Rest_API</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>cryptocurrencycomparator</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>CryptoCompareDetails</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 页面,我们可以在其中提供 from 货币和 to 货币

<!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>Cryptocurrency</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: #df5b47;
			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;
		}
	</style>
</head>
<body>
<div class="main-form" id="main-form">
	<section>
		<h5 class="text-center">Enter a Cryptocurrency that need to be compared </h5>
		<div class="form-group">
			<input id="fsym" type="text" class="form-control" placeholder="Enter a Cryptocurrency that need to be compared..." 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">Compare Cryptocurrencies</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>USD : <span id="USD"></span></strong></p>

			
<p><strong>EUR : <span id="EUR"></span></strong></p>

			
<p><strong>INR : <span id="INR"></span></strong></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 fsym = document.getElementById("fsym").value;
		var tsyms = document.getElementById("tsyms").value;

		if(fsym != "" && fsym != null && tsyms != "" && tsyms != null) {
			var xhttp = new XMLHttpRequest();
			xhttp.onreadystatechange = function() {
				if (this.readyState == 4 && this.status == 200) {
					var jsonResponse = JSON.parse(this.responseText);
					document.getElementById("USD").innerHTML = jsonResponse.USD;
					document.getElementById("EUR").innerHTML = jsonResponse.EUR;
					document.getElementById("INR").innerHTML = jsonResponse.INR;
					document.getElementById("loader").classList.add("hideElement");
					document.getElementById("profile").classList.remove("hideElement");
				}
			};
			xhttp.open("GET", "getCryptocurrencyComparisonDetailsByName?fsym=" + fsym + "&tsyms=" + tsyms, true);
			
			xhttp.send();
			console.log("done");
		} else {
			console.log("Enter from and to cryptocurrency...")
		}
	}
</script>
</html>

输出:

Java 新手如何使用Spring MVC RestAPI 的加密?_html_04

 

让我们提供货币的往返值

Java 新手如何使用Spring MVC RestAPI 的加密?_ide_05


为了正确呈现 JSON 响应,我们按照控制器文件通过 Spring 执行操作。让我们看看重要文件

应用程序配置文件

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.cryptocurrencycompare.cryptocurrencycompare_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

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[] { "/" };
	}

}

控制器类

CryptocurrencyComparatorController.java

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 CryptocurrencyComparatorController {
	@RequestMapping("/getCryptocurrencyComparisonDetailsByName")
	public @ResponseBody
	JsonObject getCryptocurrencyComparatorDetails(String fsym,String tsyms) throws IOException {

		JsonObject jsonObject = new JsonObject();
		jsonObject = getCryptocurrencyComparatorData(fsym,tsyms);
		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(2,internalData[0].length()-1).equalsIgnoreCase("BTC")) {
				jsonObject.addProperty("BTC",internalData[1].substring(0,internalData[1].length()));
				
			}
			if (internalData[0].substring(1,internalData[0].length()-1).equalsIgnoreCase("USD")) {
				jsonObject.addProperty("USD",internalData[1].substring(0,internalData[1].length()));
			}
			if (internalData[0].substring(1,internalData[0].length()-1).equalsIgnoreCase("EUR")) {
				jsonObject.addProperty("EUR",internalData[1].substring(0,internalData[1].length()));
			}
			if (internalData[0].substring(1,internalData[0].length()-1).equalsIgnoreCase("INR")) {
				jsonObject.addProperty("INR",internalData[1].substring(0,internalData[1].length()-1));
			}
	
		}
		return jsonObject;
	}

	private JsonObject getCryptocurrencyComparatorData(String fromCryptocurrency,String toCryptocurrency) throws IOException {
		StringBuilder responseData = new StringBuilder();
		JsonObject jsonObject = null;

		URL url = null;
		
		url = new URL("https://min-api.cryptocompare.com/data/price?fsym="+fromCryptocurrency+"&tsyms="+toCryptocurrency+",USD,EUR,INR");

		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;
	}
}

输出:

Java 新手如何使用Spring MVC RestAPI 的加密?_java_06

 

举报

相关推荐

0 条评论