Springboot 入门实例之一:创建一个RESTful Web 服务

本系列文章主要记录学习 Springboot 官网快速入门实例的过程,官网的实例总共有68个,每个实例官方说大概在15~30min钟。

。我以为对于web框架的学习,先做一遍实例会比较有感觉,然后再去研究相关的图书来提高理论认知。

本文介绍快速入门实例中的第一个实例,创建一个RESTful Web 服务。当然对英文比较熟悉的话可以参照原文。

1、创建的服务

创建一个服务,接受HTTP GET 请求服务的问候:http://localhost:8080/greeting.

服务将返回一个JSON来表示问候(greeting),如下所示:

{"id":1,"content":"Hello, World!"}

同时,你也可以针对查询字符串中的 name 参数定制化一个问候内容,比如 GET 查询字符串如下:

http://localhost:8080/greeting?name=Liuzard

则 name 参数的值 Liuzard 会替代默认值 “World ”,并且反应到服务返回的JSON中:

{"id":1,"content":"Hello, Liuzard!"}

2、环境要求

(1)JDK 1.8 以上

(2)IntelliJ IDEA 或者其他IDE

(3)Maven 3.2以上(或者Gradle 4 以上)

3、创建项目

(1)在IDEA 的 new project 弹出的窗口中选择 Spring Initializr,在右侧选择项目的JDK。

(2)项目命名

通常Group 命名方式为 com.公司名,比如 com.alibaba,这里由于是一个示例,将公司名替换为example

Artifact 命名为项目名称,这里填写rest-service。

(3)选择需要的依赖

根据项目的需要选择相应的依赖,因为是web服务,所以选择Web相关的依赖。当然假如在这一步不确定的话,也可以什么也不选,在项目设置完成之后在Maven的配置文件中添加依赖。

做完上面3个步骤之后,就会产生如图所示下结构的项目:

maven配置文件pom.xml自动生成的内容如下:

<?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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>rest-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>rest-service</name>
    <description>Demo project for Spring Boot</description>

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

    <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

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

</project>

4、创建 RESTful Web 服务

(1)创建一个资源表示类

在创建之前首先考虑一下服务交互逻辑:

服务会处理 /greeting GET请求,且请求中包含一个可选的参数 name。服务收到请求后输出如下如下所示:

{
    "id": 1,
    "content": "Hello, World!"
}

id字段 是greeting的唯一标识符,content字段是问候语的文本表示。

对greeting 的表示进行建模,建立一个资源表示类,代码如下:(路径:/src/main/java/com/example/restservice/Greeting.java),

package com.example.restservice;

public class Greeting {
    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId(){
        return this.id;
    }

    public String getContent(){
        return this.content;
    }
}

(2)创建一个资源控制器(controller)

在Spring 创建的 RESTful web 服务中,HTTP的请求由controller处理,controller 由@RestController注解标识。GreetingController 的路径为(/src/main/java/com/example/restservice/GreetingController.java),它处理/greeting GET 请求,并返回一个Greeting 类的实例,GreetingController的代码如下:

package com.example.restservice;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class GreetingController {
    private static final String template = "Hello,%s!";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}

到此,就可以运行 RestServiceApplication.java (/src/main/java/com/example/restservice/RestServiceApplication.java)文件,开启web服务了。并可以输入以下url 进行测试:

http://localhost:8080/greeting  ## 网页返回 {"id":1,"content":"Hello,World!"}
http://localhost:8080/greeting?name=Liuzard  ## 网页返回{"id":2,"content":"Hello,Liuzard!"}

(3)代码解释

1、GreetingController.java

代码中的部分注解解释如下:

1、@GetMapping 注解确保将对 /greeting 的HTTP GET请求映射到greeting()方法。

2、@RequestParam将查询字符串参数 name 的值绑定到 greeting()方法的名称参数中。如果请求中没有name参数,则使用默认值 World。

方法体的实现基于计数器(counter)的 当前值+1 创建并返回带有id和content属性的新Greeting实例,并使用greeting模板给定的名称。

传统MVC controller和RESTful web 服务 controller之间的一个关键区别是HTTP响应体的创建方式。与依赖视图技术将greeting 数据在服务器端呈现为HTML不同,这个RESTful web服务 controller填充并返回一个Greeting对象。对象数据将直接以JSON的形式写入HTTP响应。

上述代码使用Spring 中的@RestController注解,表示该类作为一个controller,它的每一个方法返回一个领域对象(domain object)而不是视图(view),@RestController注解包含@Controller 和@ResponseBody两个注解,是它们的合体。

Greeting对象必须转换为JSON。由于Spring的HTTP消息转换器支持,不需要手动执行转换。因为Jackson2在classpath中,所以会自动选择Spring的MappingJackson2HttpMessageConverter将Greeting实例转换为JSON。

2. RestServiceApplication.java

RestServiceApplication.java 是自动生成的类,用于启动服务,不需要作任何修改。

package com.example.restservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RestServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(RestServiceApplication.class, args);
    }

}

其中 @SpringBootApplication注解包含以下内容:

1、@Configuration:将类标记为应用程序上下文的bean定义源。

2、@EnableAutoConfiguration:告诉Spring Boot根据类路径设置、其他bean和各种属性设置开始添加bean。例如,如果spring-webmvc位于classpath上,则该注释将应用程序标记为web应用程序并激活关键行为,例如设置 DispatcherServlet。

@ComponentScan:告诉Spring在com/liuzard/restservice.包中查找其他组件、配置和服务,让它找到controller。

main()方法使用Spring Boot的SpringApplication.run()方法来启动应用程序。它没有一行XML吗?也没有web.xml文件。这个web应用程序是100%纯Java的,您不必配置任何管道或基础架构。

(5)将项目生成为可执行的JAR包

如果用 Maven,可以在IDEA的右侧工具栏点击Maven下的 package,即可将项目一键打包。生成的JAR包在 /target 文件夹下。

运行JAR包,即启动了RESTful  Web 服务,可以用上面的url 进行测试。

java -jar rest-service-0.0.1-SNAPSHOT.jar

参考文献:

官网:Building a RESTful Web Service

发布了10 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u012995500/article/details/104398948