Spring MVC — получение информации об университете/колледже через REST API

Опубликовано: 9 Января, 2023

Передача репрезентативного состояния (REST) — это архитектурный стиль, который определяет набор ограничений, используемых для создания веб-служб. REST API — это простой и гибкий способ доступа к веб-сервисам без какой-либо обработки. Spring MVC — это Web MVC Framework для создания веб-приложений. Это модуль spring, такой же, как spring boot, spring-security и т. д. Термин MVC означает архитектуру Model-View-Controller. В настоящее время вызовы REST API широко используются для получения различной информации, такой как погода, почтовый индекс, криптовалюта, информация об университете и т. д. В этой статье давайте попробуем получить информацию об университете/колледже через

http://universities.hipolabs.com/search?country=india&name=kamaraj

Соответствующий вывод JSON:

http://universities.hipolabs.com/search?country=india

Мы получим много значений для этого и давайте посмотрим образец

Используя Spring Framework, давайте реализуем и получим подробную информацию о колледже. Для простоты передадим в качестве параметров оба параметра, а именно страну и имя.

Пошаговая реализация

Структура проекта:

Это проект, управляемый maven. Следовательно, начнем с

пом.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.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>
        <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>

Давайте начнем со страниц JSP, которые представляют собой страницу, которая отображается в tomcat при запуске проекта.

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

Выход:

Процесс выполнения:

Со страницы JSP вызывается метод «GET» со строкой поиска, и он перенаправляется в класс Spring Controller, где URL REST API, http://universities.hipolabs.com/search?name=<collegename>&country =<countryname> вызывается, и он создаст массив JSON, как указано выше. Из этого мы берем только значения «name» и «web_pages».

Пример:

name: Madurai Kamaraj University 
web_pages: http://www.mkuhyd.com/

Чтобы получить подробности, нам нужно просмотреть важные файлы проекта.

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