天天看點

Spring Boot系列之開發一個接口

原文首發于微信公衆号:躬行之(jzman-blog)

Spring Boot 是用來簡化 Spring 應用程式的開發的,可以減少不必要的配置過程,其主要特性包括 Spring Boot Starter、自動配置、指令行接口、Actuator 等,作為 Android 開發者對 Spring Boot 的學習将以會使用為主,所有文章會基于對應的案例,本篇文章将從以下幾個方面介紹如何使用 Spring Boot 開發一個接口:

  1. Spring Boot項目初始化
  2. 使用IDEA建立Spring Boot項目
  3. Spring Boot項目目錄結構
  4. 簡述POM檔案
  5. 實作一個簡單的接口
  6. 接口測試

Spring Boot項目初始化

建立 Spring 應用程式都是從 Spring Initializr 開始,可以快速的選擇項目的依賴項,可以通路

https://start.spring.io/

來完成 Spring 應用程式的建立,如下圖所示:

Spring Boot系列之開發一個接口

通過配置可生成對應配置資訊的項目源碼包,使用 IntelliJ IDEA 或其他 IDE 打開即可。

使用IDEA建立Spring Boot項目

最常見的方式肯定是使用 IDE 來進行 Spring 相關項目的建立,這裡選擇 IntelliJ IDEA 來建立 Spring Boot 項目。

第一步:選擇 File->New->Project,如下:

Spring Boot系列之開發一個接口

第二步:選擇 Spring Initializr,Project SDK 至少為 JDK 1.8,然後選擇 Next:

Spring Boot系列之開發一個接口

第三步:根據項目配置項目資訊,然後選擇 Next:

Spring Boot系列之開發一個接口

第四步:選擇 Web->Spring Web 以及 Spring Boot 的版本,這一步實際上就是為該項目添加了支援 Web 開發的依賴,之後會在 pom 檔案中看到相關依賴,然後選擇 Next:

Spring Boot系列之開發一個接口

第五步:選擇 Finish 完成項目的建立:

Spring Boot系列之開發一個接口

Spring Boot項目目錄結構

Spring Boot 項目的主要目錄結構如下:

│ pom.xml
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─manu
    │  │          └─hello
    │  │                  SpringBootHelloWorldApplication.java
    │  │
    │  └─resources
    │      │ application.properties
    │      │
    │      ├─static
    │      └─templates
    └─test
        └─java
            └─com
                └─manu
                    └─hello
                            SpringBootHelloWorldApplicationTests.java
           

主要目錄與檔案介紹如下:

  • pom.xml:項目基于 mavan 的依賴配置檔案,如果項目基于 gradle,則有對應的 gradle 檔案;
  • src/main/java:項目源代碼目錄;
  • src/main/resources:資源檔案目錄;
  • src/test:測試檔案目錄;
  • application.properties:配置檔案,也可以使用 yml 檔案進行配置;
  • static:靜态資源檔案目錄,如 html、css、js 等;
  • templates:模闆檔案目錄,如 Thymeleaf 等;
  • SpringBootHelloWorldApplication:項目啟動類。

簡述POM檔案

POM 是項目對象模型(Project Object Model)的簡稱,maven 項目通過 xml 來進行項目配置,pom.xml 就是用來配置 maven 項目的,pom.xml 檔案類似于 Android 開發中的 build.gradle 檔案,當然 Spring Boot 項目也可以使用 gradle 來進行建構,主要用來管理項目依賴、配置項目資訊等,來看一下 Spring Web 項目的 pom 檔案内容:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--pom模型版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!--繼承的父項目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <!--項目資訊-->
    <groupId>com.manu</groupId>
    <artifactId>spring-boot-hello-world</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!--項目産生的構件類型,預設jar,其他如war、rar、ejb、ear、par等-->
    <packaging>jar</packaging>
    <name>spring-boot-hello-world</name>
    <description>Spring Boot sample for Hello World!</description>

    <!--屬性設定-->
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!--依賴-->
    <dependencies>
        <!--支援Web-->
        <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>
    </dependencies>

    <!--編譯-->
    <build>
        <!--插件-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
           

至于 pom 檔案的其他具體配置這裡不做細究。

實作一個簡單的接口

根據上面步驟項目已經建立好了,項目啟動類如下:

@EnableAutoConfiguration
@ComponentScan
@Configuration
//@SpringBootApplication
public class SpringBootHelloWorldApplication {
    public static void main(String[] args) {
        // 啟動程式,包括Spring容器、内嵌的Tomcat等
        SpringApplication.run(SpringBootHelloWorldApplication.class, args);
    }
}
           

其中

@SpringBootApplication

相當于

@EnableAutoConfiguration

@ComponentScan

@Configuration

一起使用,主要用來配置啟動類,這裡将在此基礎上實作一個接口,首先建立一個

MessageBean

作為傳回的實體類,如下:

/**
 * @Desc: MessageBean
 * @Author: jzman
 * @Date: 2020/3/6 15:51.
 */
public class MessageBean {
    private long id;
    private String author;
    private String message;

    public MessageBean(long id, String author, String info) {
        this.id = id;
        this.author = author;
        this.message = info;
    }
    // ...
}
           

然後,建立對應的控制器類,其中注解

@RestController

将類

HelloWorldController

标記為一個控制器,該類裡面的方法的傳回都将被轉換成對象而不是頁面視圖,等價于注解

@Controller

@ResponseBody

一起使用。

傳回的

MessageBean

将會被轉換成

json

,這個過程由 Spring 的 HTTP 消息轉換器自動支援,最終使用

MappingJackson2HttpMessageConverter

MessageBean

對象轉換為對應的

json

格式

/**
 * @Desc: HelloWorldController
 * @Author: jzman
 */
//@Controller
//@ResponseBody
@RestController
public class HelloWorldController {

    private final AtomicLong counter = new AtomicLong();

//    @RequestMapping(value = "/message", method = RequestMethod.GET)
    @GetMapping("/message")
    public MessageBean message(@RequestParam(name = "author", defaultValue = "jzman") String author,
                               @RequestParam(name = "message", defaultValue = "Hello world!") String message) {
        return new MessageBean(counter.incrementAndGet(), author, message);
    }
}
           

@RestController

相當于

@Controller

@ResponseBody

一起使用的效果,就是将 Controller 中傳回的對象轉換為對應的格式。

@Controller

負責的類的注入操作,這裡不進行深入,如果用過 Android 開發中的 Dagger 架構可有助于了解注解

@Controller

的使用,

@ResponseBody

主要是辨別将傳回的對象轉換為特定的格式,預設是 json 格式。

@RequestMapping

用于位址映射,可在類上和方法上使用,如果在類上使用,該類中所有響應請求的方法都要以此為父路徑,如果在方法上使用則表示目前響應的路徑,如上代碼中實作一個 GET 請求可以使用

@RequestMapping

,也可以使用

@GetMapping

@GetMapping

實際上預設指定了請求方法為

RequestMethod.GET

,此外

@RequestParam

用來配置請求參數。

接口測試

運作

SpringBootHelloWorldApplication

,運作成功截圖如下:

Spring Boot系列之開發一個接口

通路下面接口檢視傳回的資料:

http://localhost:8080/message?author=jzman&message=Hello
           

傳回資料如下:

至此,使用 Spring Boot 實作了一個簡單的接口,接口配置方式類似于 Android 開發中的 Retryfit,使用注解輕松完成相關配置。

Spring Boot系列之開發一個接口

繼續閱讀