【Spring Boot】创建你的第一个 Spring Boot 应用

news2024/12/24 21:41:39

创建你的第一个 Spring Boot 应用

  • 1.环境配置
  • 2.步骤详解
  • 3.项目结构分析
    • 3.1 入口类 DemoApplication
    • 3.2 控制器 PathVariableController
    • 3.3 控制器 BasicController
    • 3.4 模型 User
  • 4.运行

Spring Boot 目前已经成为了 Java 开发领域的框架范式。本篇博客,我将带领大家一起创建一个 Spring Boot 的 Demo 应用。

1.环境配置

在开始之前,我们需要安装好编辑器 IDEA,以及配置好 Java 和 Maven 的环境。

环境/工具版本下载链接
IntelliJ IDEA 2023.3.4 2023.3.4 2023.3.4链接
jdk 1.8 1.8 1.8链接
maven 3.6.3 3.6.3 3.6.3链接

通过以下命令可以检验是否安装及配置成功。

在这里插入图片描述

🚀 具体如何安装不在本篇博文的讨论范围内,网上有很多的教程,但如果在安装过程中有问题,或者在本篇博文的实践中遇到了问题,可以在评论区给博主留言。

2.步骤详解

单击 IDEA 菜单栏中的 FileNewProject,再选择 Spring Initializr,做如下配置。

在这里插入图片描述
注意,Server URL 我们换成了 https://start.aliyun.com/,否则按照默认配置的 https://start.spring.ioJava 选不到 8

我们可以分别打开这两个网站看一下:

  • 🚀 https://start.spring.io

在这里插入图片描述

  • 🚀 https://start.aliyun.com/

在这里插入图片描述
默认选择的 Spring Boot 版本是 2.6.13。如果要添加依赖,也可以在这个窗口进行。比如,我们选中了 Lombok,Spring Boot 就会自动添加 Lombok,并下载依赖。

在这里插入图片描述
点击 Create,一个 Spring Boot 的 Demo 应用就创建好了,是不是非常迅速!

在这里插入图片描述

🚀 另外一种创建 Spring Boot 项目(这种方式估计很少使用):打开浏览器访问网站(即上面提到的网站),在其中选择依赖、版本和配置,然后生成工具包。生成完成后下载到本地电脑,将其导入开发软件中即可使用。

注意,我们这里的 Maven 配置用的不是默认的,否则下载依赖包会很慢,可以自行在 Maven 的 settings.xml 文件中配置阿里云镜像。

在这里插入图片描述

3.项目结构分析

初始化后的项目结构如下:

在这里插入图片描述

3.1 入口类 DemoApplication

package com.example.demo;

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

@SpringBootApplication
public class DemoApplication {

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

}

3.2 控制器 PathVariableController

package com.example.demo.demos.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class PathVariableController {

    // http://127.0.0.1:8080/user/123/roles/222
    @RequestMapping(value = "/user/{userId}/roles/{roleId}", method = RequestMethod.GET)
    @ResponseBody
    public String getLogin(@PathVariable("userId") String userId, @PathVariable("roleId") String roleId) {
        return "User Id : " + userId + " Role Id : " + roleId;
    }

    // http://127.0.0.1:8080/javabeat/somewords
    @RequestMapping(value = "/javabeat/{regexp1:[a-z-]+}", method = RequestMethod.GET)
    @ResponseBody
    public String getRegExp(@PathVariable("regexp1") String regexp1) {
        return "URI Part : " + regexp1;
    }
}
  • package:代表包路径。PathVariableController 类在 com.example.demo.demos.web 包下。
  • import:代表在当前类引入其他类。以便用这个类创建对象或使用他们的方法。
  • @Controller:声明此类是一个 Spring MVC Controller 对象。
  • @RequestMapping:配置 URL 和方法之间的映射。可注解在类和方法上。注解在方法上的 @RequestMapping 路径会继承注解在类上的路径。

3.3 控制器 BasicController

package com.example.demo.demos.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BasicController {

    // http://127.0.0.1:8080/hello?name=lisi
    @RequestMapping("/hello")
    @ResponseBody
    public String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {
        return "Hello " + name;
    }

    // http://127.0.0.1:8080/user
    @RequestMapping("/user")
    @ResponseBody
    public User user() {
        User user = new User();
        user.setName("theonefx");
        user.setAge(666);
        return user;
    }

    // http://127.0.0.1:8080/save_user?name=newName&age=11
    @RequestMapping("/save_user")
    @ResponseBody
    public String saveUser(User u) {
        return "user will save: name=" + u.getName() + ", age=" + u.getAge();
    }

    // http://127.0.0.1:8080/html
    @RequestMapping("/html")
    public String html() {
        return "index.html";
    }

    @ModelAttribute
    public void parseUser(@RequestParam(name = "name", defaultValue = "unknown user") String name
            , @RequestParam(name = "age", defaultValue = "12") Integer age, User user) {
        user.setName("zhangsan");
        user.setAge(18);
    }
}

3.4 模型 User

package com.example.demo.demos.web;

public class User {

    private String name;

    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

4.运行

单击打开 DemoApplication 入口类,然后单击第 7 行代码处的绿色按钮,在弹出的选项中选择 Run 'DemoApplication',启动 Spring Boot 应用程序。

在这里插入图片描述

  • 访问 http://127.0.0.1:8080/user/123/roles/222(这里的 8080 是默认的端口),在网页中就可以看到以下内容:

在这里插入图片描述

  • 访问 http://127.0.0.1:8080/html,在网页中就可以看到以下内容:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1522108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DataGrip 面试题及答案整理,最新面试题

DataGrip的数据库兼容性和多数据库支持如何实现? DataGrip实现数据库兼容性和多数据库支持的方式包括: 1、广泛的数据库支持: DataGrip支持多种数据库,包括但不限于MySQL, PostgreSQL, SQL Server, Oracle, SQLite, 和MongoDB&a…

前端学习之css选择器--基本选择器、关系选择器、属性选择器、复合选择器、伪类选择器

目录 基本选择器 结果 关系选择器 结果 父子关系 祖先后代关系 相邻兄弟关系 兄弟关系 ​编辑 属性选择器 结果 复合选择器 结果 伪类选择器 结果 伪类选择器-操作标签 结果 未访问 访问后 悬停 基本选择器 <!DOCTYPE html> <html lang"en"…

Java八股文(Git)

Java八股文のGit Git Git Git 是什么&#xff1f;它有什么作用&#xff1f; Git 是一种分布式版本控制系统&#xff0c;用于管理源代码的变更和追踪。 它可以记录文件更改的历史&#xff0c;帮助多人协同开发&#xff0c;并提供了回滚、分支管理等功能。 Git 和 SVN&#xff0…

数字电子技术实验(四)

单选题 1.组合逻辑电路中产生竞争冒险的原因是&#xff1f; A. 电路没有最简化 。 B. 时延 。 C. 电路有多个输出。 D. 逻辑门的类型不同。 答案&#xff1a;B 评语&#xff1a;10分 单选题 2.下列表达式不存在竞争冒险的有&#xff1f; 答案&#xff1a;A 评语&#x…

【b站咸虾米】2 Vue基础(下) 2021最新Vue从基础到实例高级_vue2_vuecli脚手架博客案例

课程地址&#xff1a;【2021最新Vue从基础到实例高级_vue2_vuecli脚手架博客案例】 https://www.bilibili.com/video/BV1pz4y1S7bC/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2 Vue基础 下 2.8 计算属性 2.8.1 计算属性使用 2.8.2 计算…

MySQL:视图

1. 概述 在MySQL中&#xff0c;视图&#xff08;View&#xff09;是一个虚拟存在的表&#xff0c;其内容是由查询定义的。视图本身并不包含数据&#xff0c;它只包含一条SQL查询语句&#xff08;即定义视图的SELECT语句&#xff09;。当通过视图访问数据时&#xff0c;MySQL会执…

zed2i相机驱动的安装(2)

安装完sdk和wrapper&#xff0c;启动时显示缺少标定文件&#xff0c;第一反应是运行自带的标定程序 但是此时运行ZED tools里的标定程序也会出问题 打开 On Linux : /usr/local/zed/settings/On Windows : C:\ProgramData\Stereolabs\settings 查看里面是否是空的&#xff…

c++算法学习笔记 (8) 树与图部分

1.树与图的存储 &#xff08;1&#xff09;邻接矩阵 &#xff08;2&#xff09;邻接表 // 链式前向星模板&#xff08;数组模拟&#xff09; #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N 100010, M …

官网链接怎么转二维码?扫码直接跳转官网的方法

随着互联网的不断发展&#xff0c;现在一般信息内容都是通过手机来获取的&#xff0c;所以现在通过手机访问官方网站获取内容也是一种很常见的方式&#xff0c;那么如何将官网网址生成二维码图片&#xff0c;用户能够通过扫码访问官方网站或者其他页面内容呢&#xff1f;下面分…

基于SpringBoot SSM vue办公自动化系统

基于SpringBoot SSM vue办公自动化系统 系统功能 登录 个人中心 请假信息管理 考勤信息管理 出差信息管理 行政领导管理 代办事项管理 文档管理 公告信息管理 企业信息管理 会议室信息管理 资产设备管理 员工信息管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: S…

xray问题排查,curl: (35) Encountered end of file(已解决)

经过了好几次排查&#xff0c;都没找到问题&#xff0c;先说问题的排查过程&#xff0c;多次确认了user信息&#xff0c;包括用户id和alterid&#xff0c;都没问题&#xff0c;头大的一逼 问题排查过程 确保本地的xray服务是正常的 [rootk8s-master01 xray]# systemctl stat…

深入浅出FISCO BCOS:区块链底层平台

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 我前面有补充相关的区块链的知识 如果没有了解的话 可能部分概念或名词会不懂哦 建议先了解一波再来看~http://t.c…

灯塔:CSS笔记(4)

伪类选择器&#xff1a; 1.作用与优势&#xff1a; 1.作用&#xff1a;根据元素在HTML中的结构关系查找元素 2.优势&#xff1a;减少对于HTML中类的依赖&#xff0c;有利于保持代码的整洁 3.场景&#xff1a;常用于查找某父级选择器中的子元素 2.选择器 选择器说明E:first-c…

关于UE的相机震动CameraShake

创建CameraShake资源 CameraShake配置是个蓝图类&#xff0c;我们选择创建BlueprintClass&#xff0c;父类选择CameraShakeBase即可。 参数调整 目前主要用到了 LocationAmplitudeMultiplier 1 LocationFrequencyMultiplier 10 RotationAmplitudeMultiplier 1 Rotation…

【3月16日-云服务器推荐】京东云降价了!!4折变2折 阿里云 腾讯云最新价格对比 选购指南 搭建博客 游戏服务器均可多用

3月16日更新&#xff0c;京东云又双叒降价了&#xff01; 《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实时更新】云服务器1分钟教会你如何选择教程 https://docs.qq.com/document/DV0RCS0lGeH…

Leet code 179 最大数

解题思路 贪心算法 贪心算法就是走一步看一步 每一步都取当前位置的最优解 这题我们该如何贪呢&#xff1f; 我们先把int数组转换为string数组 以示例2为例 3 30 34 5 9 排序哪个在前哪个在后&#xff1f; 3 30 &#xff08;330&#xff09;> 30 3 &#xff08;30…

免费阅读篇 | 芒果YOLOv8改进110:注意力机制GAM:用于保留信息以增强渠道空间互动

&#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#xff1a; 芒果YOLOv8深度改进教程 该篇博客为免费阅读内容&#xff0c;直接改进即可&#x1f680;&#x1f680;&#x1f…

leetcode每日一题--矩阵中移动的最大次数

一.题目原型 二.思路解析 1.动态规划 这道题要求的是矩阵的最大移动次数。根据题目意思&#xff0c;从索引 0 列开始向右移动&#xff0c;每次移动一列&#xff0c;最多移动到 n - 1 列&#xff0c;也就是 n - 1次。其移动规则为&#xff1a;当前单元格可以移动到其右上方、正…

安装PYQT5 遇到Microsoft Visual C++ 14.0 is required解决方法

# Time: 2024/03/16 #Author: Xiaohong # 运行环境: OS: Windows 7 旗舰版 # Python: 3.7.9 Pyqt5 # 目的: 解决安装PYQT5 遇到Microsoft Visual C 14.0 is required 1.安装PYQT5时&#xff0c;遇到Microsoft Visual C 14.0 is required&#xff0c;如图 2.查Microsoft…

Yolo系列算法-理论部分-YOLOv1

0. 紧接上一篇目标检测算法的介绍 基于深度学习的目标检测算法概述-CSDN博客 本篇YOLO算法系列&#xff0c;参考优秀作者-AI菌&#xff0c;文章链接&#xff1a;YOLO系列算法精讲&#xff1a;从yolov1至yolov8的进阶之路&#xff08;2万字超全整理&#xff09;_yolov9-CSDN博…