基於 Spring Boot 2.0 構建一個 RESTful WebService

REST 全稱是 Representational State Transfer,中文意思是「表述性狀態轉移」。RESTful 是關於 Web 的現有特徵和使用方式的一些準則和約束。 基於 Spring MVC 的 RestController,咱們能夠方便的構建一個 RESTful 風格的應用。javascript

使用 Maven 建立項目

咱們能夠直接使用 IntelliJ IDEA (推薦)中的 Spring initializer 快速建立一個基於 Spring Boot 的項目,這裏使用 Maven 構建, pom.xml 文件以下:php

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-rest-service</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>
複製代碼

Spring Maven plugin 是 Spring 針對 Maven 開發的一套插件,包含了幾個強大的功能:java

  • 無需過多複雜的配置便可快速構建一個可執行的 jar 包,使應用的運行能夠幾乎不受環境的影響
  • 自動搜索 public static void main() 方法,並將其所在的類標誌爲啓動類
  • 對 Spring Boot 的依賴進行自動化管理,全部的依賴項目版本都和 Spring Boot 父項目保持一致(默認狀況下),固然也能夠手動指定其餘版本

Spring 一樣支持 Gradle 構建,詳細配置請參考 Build with Gradleweb

建立實體類

這裏的實體類並不是 ORM 中的實體類,而是 REST 中的 「資源」 ,咱們的 web service 要實現的功能是處理 URL 爲 /userinfo/1GET 請求,並將結果以 JSON 做爲響應體返回,響應狀態碼爲 200 OK,JSON 的格式以下:spring

{
    "id": 1,
    "name": "張三"
}
複製代碼

這個例子簡單模擬了獲取 id 爲 1 的用戶信息,首先要建立 POJO 類 Usershell

public class User {

    private final long id;
    private final String name;

    public User(long id, String name) {
        this.id = id;
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}
複製代碼
Spring 默認使用 `Jackson` 做爲 JSON 解析庫將 POJO 類對象序列化爲 JSON。
複製代碼

建立 Controller

在 controller 類上添加 @RestController 註解便可實現將返回值序列化爲 JSON 並充當響應體返回,返回的 content-typeapplication/json,請求 /user/1 將得 id 爲 1 的用戶的信息,下面是 controller 類:apache

@RestController
public class GreetingController {

    private static final String template = "張三";
    private final long id = 1;

    @RequestMapping("/user/{id}")
    public User userInfo(@PathVariable("id")long id) {
        return new User(id, template);
    }
}
複製代碼

讓應用跑起來

傳統的構建方式是生成一個 war 文件而後部署到 web 服務器上,這樣有時會以爲不太方便,所以推薦使用 Spring Boot 的 Maven 插件快速生成一個獨立的可執行的 jar 文件,使用 java -jar 命令便可啓動這個應用,全部的類和資源等文件都被集成到這一個 jar 文件中,裏面也包括了嵌入式的 servlet 容器(好比 Tomcat),下面是這個應用的啓動類:json

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
複製代碼

@SpringBootApplication 這個註解是一個組合註解,它包括:瀏覽器

  • @Configuration:聲明這個類是上下文中的 bean 的配置類
  • @EnableAutoConfiguration:使 Spring 將上下文中掃描到的相關 bean 配置類或 properties 類,並將這些 bean 放到應用上下文中
  • Spring 當檢測到 classpath 下有 spring-webmvc 的依賴後,會自動給應用啓動類上添加 @EnableWebMvc 的註解,它表示這個應用是一個 web 應用,應用啓動時就會執行和 web 相關的操做,好比實例化 DispatcherServlet 類並進行相關的配置
  • @ComponentScan:使 Spring 掃描全部自定義組件類、配置類、業務類以及控制器,並將其裝配

在啓動類中的 main 方法中調用 SpringBootApplication.run() 便可實現應用的啓動,和傳統 Java web 應用配置複雜的 web.xml 文件大相徑庭,不須要在配置上花費太多時間bash

構建可執行的 jar

咱們可使用一條簡單的命令來完成應用打包成 jar:

$ ./mvnw clean package
複製代碼

執行這條命令來啓動應用:

 $ java -jar target/gs-rest-service-0.1.0.jar
複製代碼

作一些簡單的測試

在瀏覽器中訪問 htpp://localhost:8080/user/1,沒問題的話會獲得以下響應:

{
    "id": 1,
    "name": "張三"
}
複製代碼

總結

這僅僅是一個 RESTful web service,更多文檔請瀏覽:Building a RESTful Web Service

我的博客同步更新,獲取更多技術分享請關注:鄭保樂的博客

相關文章
相關標籤/搜索