Spring MVC - Get University/College Details via REST API
Last Updated :
18 Aug, 2022
REpresentational State Transfer (REST) is an architectural style that defines a set of constraints to be used for creating web services. REST API is a way of accessing web services in a simple and flexible way without having any processing. Spring MVC is a Web MVC Framework for building web applications. It is a spring module same as spring boot, spring-security, etc. The term MVC stands for Model-View-Controller architecture. REST API calls are widely used nowadays to get various information like Weather, Zip code, Cryptocurrency, University details, etc., In this article, let us try to get the university/college details via
http://universities.hipolabs.com/search?country=india&name=kamaraj
Corresponding JSON Output:
http://universities.hipolabs.com/search?country=india
We will get many values for this and let us see the sample
Using Spring Framework, let us implement and get the details of the college. For simplicity, let us pass both parameters namely country and name as parameters
Step by Step Implementation
Project Structure:
This is a maven-driven project. Hence let's start with
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.college.college_RestAPI</groupId>
<artifactId>College_RestAPI</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>collegeRestAPI</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>ROOT</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>
Let us start with JSP pages which is the page that gets rendered into tomcat when the project runs
index.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>Colleges</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: 340px;
}
.main-form {
margin: 50px auto 0px;
}
.profile-area {
margin: 10px auto;
}
.main-form section, .profile-area section {
margin-bottom: 15px;
background: #f7f7f7;
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>
<div class="form-group">
<input id="searchString" type="text" class="form-control" placeholder="Enter college search name here..." required="required">
</div>
<div class="form-group">
<input id="countryName" type="text" class="form-control" placeholder="Enter country name here..." required="required">
</div>
<div class="form-group">
<button onclick="loadData()" class="btn btn-primary btn-block">Find College 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>Colleges : </strong><span id="associatedcolleges"></span></p>
<p><strong>Webpages : </strong><span id="associatedwebpages"></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 searchString = document.getElementById("searchString").value;
var countryName = document.getElementById("countryName").value;
if(searchString != "" && searchString != null && countryName != "" && countryName != null) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var jsonResponse = JSON.parse(this.responseText);
document.getElementById("associatedcolleges").innerHTML = jsonResponse.associatedcolleges;
document.getElementById("associatedwebpages").innerHTML = jsonResponse.associatedwebpages;
document.getElementById("loader").classList.add("hideElement");
document.getElementById("profile").classList.remove("hideElement");
}
};
xhttp.open("GET", "getCollegeDetailsBycountryNameAndSearchString?countryName="+ countryName + "&name=" + searchString, true);
xhttp.send();
console.log("done");
} else {
console.log("Enter country name and search string to check...")
}
}
</script>
</html>
Output:
Execution Process:
From the JSP page, a "GET" method is invoked with the search string and it is redirected to the Spring Controller class, where the REST API URL, http://universities.hipolabs.com/search?name=<collegename>&country=<countryname> is invoked and it will create the JSON Array as given above, From that, we are taking "name" and "web_pages" values alone
Example:
name: Madurai Kamaraj University
web_pages: http://www.mkuhyd.com/
To get the details, we have to go through important files of the project
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.college.college_RestAPI" })
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[] { "/" };
}
}
CollegeController.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.Iterator;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@Controller
public class CollegeController {
@RequestMapping("/getCollegeDetailsBycountryNameAndSearchString")
public @ResponseBody
JsonObject getLocalityDetailsByZipCode(String countryName,String name) throws IOException {
JsonArray jsonArray = new JsonArray();
jsonArray = getCollegeDetailsByParams(countryName,name);
JsonObject finalJsonObject = new JsonObject();
// String country = jsonObject.get("country").toString();
// country = country.replaceAll("^\"|\"$", "");
ArrayList collegeList = new ArrayList();
ArrayList stateList = new ArrayList();
ArrayList webPageList = new ArrayList();
// ArrayList longitudeList = new ArrayList();
// jsonPlacesArray = jsonObject.get("places").getAsJsonArray();
Iterator<JsonElement> objectIterator = jsonArray.iterator();
while(objectIterator.hasNext()) {
JsonElement object = objectIterator.next();
JsonObject jObj = object.getAsJsonObject();
// System.out.println(jObj.get("place name").toString() + jObj.get("state").toString() );
collegeList.add(jObj.get("name").toString().replaceAll("^\"|\"$", ""));
stateList.add(jObj.get("state-province").toString().replaceAll("^\"|\"$", ""));
webPageList.add(jObj.get("web_pages").toString().replaceAll("^\"|\"$", ""));
}
// finalJsonObject.addProperty("country", country);
finalJsonObject.addProperty("associatedcolleges", collegeList.toString());
finalJsonObject.addProperty("associatedcollegesize", collegeList.size());
finalJsonObject.addProperty("state", stateList.toString());
finalJsonObject.addProperty("statename", stateList.get(0).toString());
finalJsonObject.addProperty("associatedwebpages", webPageList.toString());
finalJsonObject.addProperty("associatedwebpagesize", webPageList.size());
return finalJsonObject;
}
private JsonArray getCollegeDetailsByParams(String countryName,String name) throws IOException {
StringBuilder responseData = new StringBuilder();
JsonArray jsonArray = null;
URL url = null;
url = new URL("http://universities.hipolabs.com/search?name=" + name + "&country=" + countryName);
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);
}
jsonArray = new Gson().fromJson(responseData.toString(), JsonArray.class);
}
return jsonArray;
}
}
Conclusion
REST API plays a major role nowadays and as the output is available in the format of JSON Array/Object, it can be rendered on any web page, android coding to get the output in android mobiles, IOS technologies to get the output in apple devices. Hence the vast amount of information is shared across the universe in a fraction of seconds using REST API.
Similar Reads
How to Make get() Method Request in Java Spring?
Java language is one of the most popular languages among all programming languages. There are several advantages of using the java programming language, whether for security purposes or building large distribution projects. One of the advantages of using JAVA is that Java tries to connect every conc
3 min read
Spring @RequestMapping Annotation with Example
The @RequestMapping annotation in Spring MVC is one of the most important annotations used to map HTTP requests to handler methods of MVC and REST controllers. In Spring MVC applications, the DispatcherServlet (Front Controller) is responsible for routing incoming HTTP requests to the handler method
4 min read
How to Capture Data using @RequestParam Annotation in Spring?
The @RequestParam annotation enables Spring to capture input data that may be passed as a query, form data, or any arbitrary custom data. It is used to bind a web request parameter to a method parameter. Here, we are going to understand these two above lines, and we will see how we can capture data
6 min read
Spring @ResponseBody Annotation with Example
Spring Annotations allow us to configure dependencies and implement dependency injection through java programs. Those are used to provide supplemental information about a program. It does not have a direct effect on the operation of the code they annotate. It does not change the action of the compil
4 min read
Spring MVC Project - Retrieving Population, Area and Region Details using Rest API
REST API is more popular nowadays as we can able to get a variety of information like Population, Area, region, sub-region, etc., One such REST API that we are going to see here is https://restcountries.com/v3.1/capital/<any capital of a country> Example: https://restcountries.com/v3.1/capital
4 min read
Spring MVC - Last 24 Hour Cryptocurrency Data using REST API
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 prov
5 min read
Spring MVC - Sample Project For Finding Doctors Online with MySQL
Spring MVC Framework follows the Model-View-Controller design pattern. It is used to develop web applications. It works around DispatcherServlet. DispatcherServlet handles all the HTTP requests and responses. With MySQL as the backend, we can store all doctor details and by using Spring MVC function
5 min read
Spring MVC JSTL Configuration
JavaServer Pages Tag Library (JSTL) is a set of tags that can be used for implementing some common operations such as looping, conditional formatting, and others. Here we will be discussing how to use the Maven build tool to add JSTL support to a Spring MVC application. also, you'll learn how to act
1 min read
Spring MVC with MySQL - Sample Project For Calculating Electricity Bill
Let us see a sample electricity bill calculation project by using Spring MVC + MySQL connectivity + JDBCTemplate. Additionally, let us test the same by using MockMvc + JUnit. MySQL Queries: DROP DATABASE IF EXISTS test; CREATE DATABASE test; USE test; DROP TABLE test.personsdetails; CREATE TABLE per
7 min read
Spring MVC - Comparison of Cryptocurrencies using REST API
REST APIS is available in plenty nowadays. As cryptocurrencies are a hot topic nowadays, there is always a need to compare the different cryptocurrencies and get the corresponding value in different currencies. As a sample, let us take a REST API call as https://min-api.cryptocompare.com/data/price?
6 min read