• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Spring BootSpring Boot 以和基本使用构建 RESTful Web 服务

武飞扬头像
codingXT
帮助1

Spring Boot简单介绍

Spring Boot用于创建可运行的、独立的、生产级的基于Spring的应用程序。Spring Boot对Spring和第三方库持约定大于配置的观念,以便可以轻松上手。大多数Spring Boot应用程序只需要很少的配置。

Spring Boot可以通过使用java -jar或更传统的war包部署来启动Java应用程序

Spring Boot的目标是:

  • 为所有Spring开发提供从根本上更快且可广泛访问的体验。
  • 开箱即用。
  • 提供一系列大型项目通用的非功能特性(例如嵌入式服务器、安全性、指标、健康检查和外部化配置)。
  • 没有代码生成,也不需要XML配置。

我们使用Spring Boot的好处:

  • Spring Boot的组件自动装配,可以让开发人员专注于核心业务开发。
  • 他的外部化配置,可以让程序一次构建、按需调配,到处运行。
  • 嵌入式容器,无需部署即可独立运行
  • Spring Boot Starter简化了依赖、按需装配
  • Production-Ready :一站式运维、生态无缝结合,应用程序推送到生产环境时对其进行监视和管理

系统要求

Spring Boot 2.6.2需要Java 8,并且兼容Java 17(包括Java 17 ),还需要Spring Framework 5.3.14或更高版本,这里采用Spring Boot 2.6.2,它是目前最新的正式版。

Spring Boot为以下构建工具提供了显式构建支持:

  • Maven 3.5
  • Gradle 6.8.x 6.9.x and 7.x

Servlet 容器

Spring Boot支持如下图所示的嵌入式Servlet容器:
学新通
可以将Spring Boot应用程序部署到任何兼容Servlet 3.1 的容器。

基本结构

使用Spring Initializr来构建Spring Boot应用,也可以使用Maven构建Spring Boot项目

学新通
选择依赖和Spring Boot版本,这里添加基本的web依赖,来写一些基础的web服务。
学新通
以下是生成的Spring Boot项目,大致结构如下所示
学新通

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.6.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xt</groupId>
    <artifactId>springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot</name>
    <description>springboot</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>
        </dependency>
    </dependencies>

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

</project>

学新通

我们可以查看maven的依赖文件
学新通
这是他的依赖图,可以自己在IDEA里面查看
学新通

启动类(SpringbootApplication)

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

@SpringBootApplication
public class SpringbootApplication {

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

}

@SpringBootApplication是一个方便的注解,它添加了以下所有内容:

  • @Configuration:将类标记为应用程序上下文的bean定义的源。
  • @EnableAutoConfiguration:告诉Spring Boot开始根据类路径设置、其他bean和各种property设置添加bean。例如,如果spring-webmvc在类路径上,这个注解将该应用标记为一个web应用程序,并激活关键行为,比如设置一个DispatcherServlet。
  • @ComponentScan:告诉Spring在com.xt包中寻找其他组件、配置和服务,让它找到控制器。

main()方法使用Spring Boot的SpringApplication.run()方法来启动应用程序。您注意到没有一行XML吗?也没有web.xml文件。这个web应用程序是100%纯Java的,你不需要配置任何基础设置。

点击run运行spring boot,启动成功,如下图所示:
学新通

默认情况下,会显示INFO日志消息,包括一些相关的启动细节,比如启动应用程序的用户。如果您需要设置除INFO之外的日志级别,请参见日志级别进行设置。应用程序版本是使用来自主应用程序类包的实现版本来确定的。

web服务运行在Tomcat容器中,DispatcherServlet是一种Servlet实现,可以用于将请求派发给指定的控制器中定义的接口

基本使用(构建 RESTful Web 服务)

只需要编写如下两个文件
学新通

创建资源表示类(Greeting类)

我们创建一个entity文件夹来存放实体类。

写入如下Greeting类:

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 id;
    }

    public String getContent() {
        return content;
    }
}
学新通

spring boot应用程序使用Jackson JSON库将类型为Greeting的实例自动封装为JSON。Jackson由web starter默认包括。

创建资源控制器(GreetingController类)

创建controller文件夹,存放控制器

在Spring构建RESTful web服务的方法中,HTTP请求由控制器处理。这些组件由@RestController注解标识。

GreetingController如下所示,通过返回greeting类的一个新实例来处理/greeting的GET请求:

package com.xt.springboot.controller;

import com.xt.springboot.entity.Greeting;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.atomic.AtomicLong;

/**
 * @Author: codingXT
 * @Date: 2022-01-20-19:19
 * @Description:
 */
@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));
    }
}

学新通

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

对于其他HTTP动词也有相应的注解(例如对于POST的@PostMapping)。还有一个@RequestMapping注解,它们都是从它派生的,可以作为同义词(例如@RequestMapping(method=GET)等同于@GetMapping)。

@RequestParam将查询字符串参数name的值绑定到greeting()方法的name参数中。如果请求中没有name参数,则使用defaultValue,这里是World。

传统MVC控制器和前面展示的RESTful web服务控制器之间的一个关键区别是创建HTTP响应体的方式。这个RESTful web服务控制器填充并返回一个greeting对象, 对象数据将作为JSON直接写入HTTP响应。而不是依靠视图view技术将greeting数据在服务器端呈现为HTML。

这段代码使用了Spring @RestController注解,它将类标记为一个控制器,其中每个方法返回一个domain对象,而不是一个视图view。它包含@Controller(带有此注解的类型被视为控制器)和@ResponseBody(指示方法的返回值应绑定到Web响应的Body中)两个注解。

Greeting对象必须转换为JSON。由于Spring的HTTP消息转换器支持,您不需要手动执行此转换。因为Jackson2在类路径上,Spring的MappingJackson2HttpMessageConverter被自动选择来将Greeting实例转换为JSON。

测试运行

在浏览器输入

http://localhost:8080/greeting

学新通

通过访问http://localhost:8080/greeting?name=xt 提供名称查询字符串参数。

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

学新通

注意id属性是如何从1更改为2的(浏览器每请求一次,增加一次)。这证明您正在跨多个请求对同一个GreetingController实例进行操作,并且它的counter字段按照预期在每个调用中递增。

References:

  • https://spring.io/guides/gs/rest-service/
  • https://docs.spring.io/spring-boot/docs/2.6.2/reference/htmlsingle/#getting-started
  • https://kaven.blog.csdn.net/article/details/122596127?spm=1001.2014.3001.5502
  • https://docs.spring.io/spring-boot/docs/current/reference/html/features.html

(写博客主要是对自己学习的归纳整理,资料大部分来源于书籍、网络资料和自己的实践,整理不易,但是难免有不足之处,如有错误,请大家评论区批评指正。同时感谢广大博主和广大作者辛苦整理出来的资源和分享的知识。)

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgeijhf
系列文章
更多 icon
同类精品
更多 icon
继续加载