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 应用程序的创建,如下图所示:

0

通过配置可生成对应配置信息的项目源码包,使用 IntelliJ IDEA 或其他 IDE 打开即可。

使用IDEA创建Spring Boot项目

最常见的方式肯定是使用 IDE 来进行 Spring 相关项目的创建,这里选择 IntelliJ IDEA 来创建 Spring Boot 项目。

第一步:选择 File->New->Project,如下:

1

第二步:选择 Spring Initializr,Project SDK 至少为 JDK 1.8,然后选择 Next:

2

第三步:根据项目配置项目信息,然后选择 Next:

扫描二维码关注公众号,回复: 12861142 查看本文章

3

第四步:选择 Web->Spring Web 以及 Spring Boot 的版本,这一步实际上就是为该项目添加了支持 Web 开发的依赖,之后会在 pom 文件中看到相关依赖,然后选择 Next:

4

第五步:选择 Finish 完成项目的创建:

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 消息转换器自动支持,最终使用 MappingJackson2HttpMessageConverterMessageBean 对象转换为对应的 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 ,运行成功截图如下:

SpringBootHelloWorldApplication

访问下面接口查看返回的数据:

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

返回数据如下:

{
    
    "id":3,"author":"jzman","message":"Hello"}

至此,使用 Spring Boot 实现了一个简单的接口,接口配置方式类似于 Android 开发中的 Retryfit,使用注解轻松完成相关配置。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jzman/article/details/109040806