Получите часовой пояс, указав широту и долготу, используя Spring MVC и REST API

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

Spring MVC Framework следует шаблону проектирования Model-View-Controller. Он используется для разработки веб-приложений. Он работает вокруг DispatcherServlet. DispatcherServlet обрабатывает все HTTP-запросы и ответы. В этой статье мы рассмотрим вызов REST API для поиска координат для заданной широты и долготы. Каждая область на земном шаре идентифицируется с помощью широты и долготы. Например, часовой пояс Индии, Азии/Калькутты можно определить с помощью

Latitude -> 21.7679
Longitude -> 78.8718

Соответствующий вызов REST API:

https://api.wheretheiss.at/v1/coordinates/<Latitude,Longitude>

Здесь вместо Широты нам нужно подставить правильное значение Широты. Вместо долготы нам нужно подставить правильное значение долготы

Пример:

https://api.wheretheiss.at/v1/coordinates/21.7679,78.8718

Выход:

Вызов REST API предоставляет ответ JSON.

С помощью среды Spring MVC давайте проанализируем ответ JSON вызова REST API и отобразим необходимые элементы. Это можно сделать с помощью проекта, управляемого maven. Давайте посмотрим, как это сделать.

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

Структура проекта для получения значения часового пояса для заданной широты и долготы. Давайте также рассмотрим необходимые тестовые примеры JUNIT.

Давайте проверим важные файлы проекта

getTimeZone.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>WTIA</title>
    <style type="text/css">
        .main-form, .profile-area {
            width: 640px;
        }
        .main-form {
            margin: 50px auto 0px;
        }
        .profile-area {
            margin: 10px auto;
        }
        .main-form section, .profile-area section {
            margin-bottom: 15px;
            background: #c080c0;
            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: 20px;
            font-weight: inherit;
            font-family: sans-serif;
        }
        .hideElement {
            display: none;
        }
    </style>
</head>
<body>
<div class="main-form" id="main-form">
    <section>
        <h5 class="text-center">Enter Latitude</h5>
        <div class="form-group">
            <input id="latitude" type="text" class="form-control" placeholder="Enter latitude here..." required="required">
        </div>
        <h5 class="text-center">Enter Longitude</h5>
        <div class="form-group">
            <input id="longitude" type="text" class="form-control" placeholder="Enter longitude here..." required="required">
        </div>
        <div class="form-group">
            <button onclick="loadData()" class="btn btn-primary btn-block">Find TimeZone</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>TimeZone: <span id="timezone_id"></strong></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 latitude = document.getElementById("latitude").value;
        var longitude = document.getElementById("longitude").value;
 
 
        if(latitude != "" && latitude != null && longitude != "" && longitude != null) {
            var xhttp = new XMLHttpRequest();
            xhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    var jsonResponse = JSON.parse(this.responseText);
                    document.getElementById("timezone_id").innerHTML = jsonResponse.timezone_id;
                    //document.getElementById("age").innerHTML = jsonResponse.age;
                    document.getElementById("loader").classList.add("hideElement");
                    document.getElementById("profile").classList.remove("hideElement");
                }
            };
            xhttp.open("GET", "getSateliteDetailsByLatAndLon?latitude=" + latitude + "&longitude=" + longitude, true);
            xhttp.send();
            console.log("done");
        } else {
            console.log("Enter latitude and lonitude...")
        }
    }
</script>
</html>

Выход:

При вводе правильной широты и долготы мы получим следующие экраны.

Пример 2:

Давайте посмотрим важные файлы, необходимые для проекта. Поскольку это проект 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.wtia.WTIA_Rest_API</groupId>
    <artifactId>WTIA_Rest_API</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>profileGenerator</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>Timezone</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>

Java-файлы:

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.wtia.WTIA_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