当前位置: 首页 > news >正文

Springboot2.0快速入门(第一章)

目录

  • 一,SpringBoot简介
    • 1.1,回顾什么是Spring
    • 1.2,Spring是如何简化Java开发的
    • 1.3,什么是SpringBoot
  • 二,Hello,World
    • 2.1,准备工作
    • 2.2,创建基础项目说明
    • 2.3,创建第一个Hello,SpringBoot程序
  • 三,HTTP接口get请求
    • 3.1,restful协议,从路径中获取参数 @PathVariable
    • 3.2,参数默认设置 @RequestParam
    • 3.3,bean对象传值(数据从body中获取) @RequestBody
    • 3.4,获取http请求头信息,例如获取token @RequestHeader
  • 四,常用json框架介绍和jackson返回结果处理
    • 4.1,springboot统一返回封装
  • 最后

一,SpringBoot简介

1.1,回顾什么是Spring

Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson 。
Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。

1.2,Spring是如何简化Java开发的

为了降低Java开发的复杂性,Spring采用了以下4种关键策略:

1、基于POJO的轻量级和最小侵入性编程,所有东西都是bean;
2、通过IOC,依赖注入(DI)和面向接口实现松耦合;
3、基于切面(AOP)和惯例进行声明式编程;
4、通过切面和模版减少样式代码,RedisTemplate,xxxTemplate;

1.3,什么是SpringBoot

Spring Boot是由Pivotal团队提供的基于Spring的框架,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot集成了绝大部分目前流行的开发框架,就像Maven集成了所有的JAR包一样,Spring Boot集成了几乎所有的框架,使得开发者能快速搭建Spring项目。

Spring Boot的主要优点:
为所有Spring开发者更快的入门
开箱即用,提供各种默认配置来简化项目配置
内嵌式容器简化Web项目
没有冗余代码生成和XML配置的要求

二,Hello,World

2.1,准备工作

我们将学习如何快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。

我的环境准备:
依赖版本jdk1.8以上
Maven-3.2以上
SpringBoot 2.x

开发工具:
IDEA

2.2,创建基础项目说明

1.首先创建一个maven工程
2.在maven的pom文件中添加Springboot的父工程和对应的依赖

在这里插入图片描述
在这里插入图片描述

这样一个maven工程就创建好了!
然后在pom文件中添加Springboot的父工程和对应的依赖

    <!--  继承默认值为Spring Boot  --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version></parent><dependencies><!--    导入Springweb的依赖    --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>

在这里插入图片描述

2.3,创建第一个Hello,SpringBoot程序

1.把启动类放到顶级目录
2.常用注解
启动类注解
@SpringBootApplication是一个复合型注解。@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
@Configuration:@Configuration标注在类上,相当于把该类作为spring的xml配置文件中 (beans ),作用为:配置spring容器(应用上下文)
@EnableAutoConfiguration:开启自动配置。MATA-INF下的spring.facotries的一些自动配置类
@ComponentScan:扫描注解。如果不配置basepackage,默认扫描@ComponentScan注解类的同级类和子目录下的所有类。所以要把启动类放到顶级目录。
控制层注解
@RestController and @RequestMapping是springMVC的注解,不是springboot特有的
@RestController = @Controller + @ResponseBody

在这里插入图片描述
HelloController类

package com.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController // 控制类
public class HelloController {@RequestMapping("/")public String sayHello(){return "hello,SpringBoot!!";}
}

在外面创建一个springboot的启动类
在这里插入图片描述
DemoApplication启动类

package com.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;// @SpringBootApplication是一个复合型注解,通常情况下,我们会把启动类放到项目的顶级目录
// 注意:SpringBootApplication中的 @ComponentScan 会默认扫描本类所在包以下的子包
@SpringBootApplication 
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class,args);}
}

运行成功,如下:

在这里插入图片描述

三,HTTP接口get请求

3.1,restful协议,从路径中获取参数 @PathVariable

    /*** 功能描述: restful 协议。从路径中获取参数* 1.接口中的参数定义,建议使用下划线隔开,不再使用驼峰* 2.path="/{cityid}/{userid}" 标识路径中那些是参数* 3.method=RequestMethod.GET 只处理get请求* 4.@PathVariable("cityid") 从路径中取出参数值* @return* */@RequestMapping("/{cityid}/{userid}")public Object test1(@PathVariable("cityid") String cityId,@PathVariable("userid") String userId){return cityId + "--" + userId;}

在这里插入图片描述

3.2,参数默认设置 @RequestParam

    /**** 参数的默认值设置* 添加@RequestParam 默认此参数是必填项* @return* **/@RequestMapping("/test2")public Object test2(@RequestParam(required = false,defaultValue = "1") Integer pageNo){return pageNo;}

在这里插入图片描述

上面显示的是默认值,如果你给他赋值,之后那个赋的值就会替代默认值,如下:

在这里插入图片描述

3.3,bean对象传值(数据从body中获取) @RequestBody

    /**** 测试@RequestBody。要从请求体中获取数据* 有如下结果* 1.数据要在请求体中。* 2.数据的格式为JSON。content-type 的值是application/json* 3.只有post请求才允许在body中设置数据* **/@RequestMapping("/test3")public Object test3(@RequestBody Person person){return person.getUserId() + "-----" + person.getAge();}

在这里插入图片描述

3.4,获取http请求头信息,例如获取token @RequestHeader

    /*** 从请求头获取数据* 一般请求头中获取一些认证信息,例如token* **/@RequestMapping("/test4")public Object test4(@RequestHeader String access_token){return access_token;}

在这里插入图片描述

四,常用json框架介绍和jackson返回结果处理

简介:介绍常用json框架和注解的使用,自定义返回json结构和格式

  1. 常用框架 阿里 fastjson 谷歌gosn等
    javaBean序列化为json 性能:Jackson > FastJson > Gson > Json-lib 同个结构
    Jackson,FastJson ,Gson 类库各有优点,各有各自的专长
    空间换时间,时间换空间

2.Jackson处理相关自动
指定字段不返回:@JsonIgnore
指定日期格式: @JsonFormat(pattern=“yyyy-MM-dd hh:mm:ss”, locale=“zh”, timezone=“GMT+8”)
空字符串不返回:@JsonInclude(JsonInclude.Include.NON_NULL)
指定别名:@JsonProperty 注意:使用别名后,请求中的Key也要使用别名

4.1,springboot统一返回封装

创建一个util包

在这里插入图片描述
然后创建一个ResultUtil工具类

package com.demo.util;import lombok.Data;import java.io.Serializable;@Data
public class ResultUtil<T> implements Serializable {public static final Integer SUCCESS_CODE = 2000;public static final Integer FAIL_CODE = 4000;public static final String SUCCESS_MESSAGE = "success";public static final String FAIL_MESSAGE = "fail";/*** 返回状态码*/private Integer code;/*** 返回信息*/private String message;/*** 返回数据*/private T data;private ResultUtil() {}public static <T> ResultUtil<T> success() {ResultUtil<T> resultUtil = new ResultUtil<>();resultUtil.setCode(SUCCESS_CODE);resultUtil.setMessage(SUCCESS_MESSAGE);return resultUtil;}public static <T> ResultUtil<T> success(T data) {ResultUtil<T> resultUtil = success();resultUtil.setData(data);return resultUtil;}public static <T> ResultUtil<T> success(String message, T data) {ResultUtil<T> resultUtil = success();resultUtil.setMessage(message);resultUtil.setData(data);return resultUtil;}public static <T> ResultUtil<T> success(Integer code, String message, T data) {ResultUtil<T> resultUtil = new ResultUtil<>();resultUtil.setCode(code);resultUtil.setMessage(message);resultUtil.setData(data);return resultUtil;}public static <T> ResultUtil<T> fail() {ResultUtil<T> resultUtil = new ResultUtil<>();resultUtil.setCode(FAIL_CODE);resultUtil.setMessage(FAIL_MESSAGE);return resultUtil;}public static <T> ResultUtil<T> fail(T data) {ResultUtil<T> resultUtil = fail();resultUtil.setData(data);return resultUtil;}public static <T> ResultUtil<T> fail(String message, T data) {ResultUtil<T> resultUtil = fail();resultUtil.setMessage(message);resultUtil.setData(data);return resultUtil;}public static <T> ResultUtil<T> fail(Integer code, String message) {ResultUtil<T> resultUtil = fail();resultUtil.setCode(code);resultUtil.setMessage(message);return resultUtil;}public static <T> ResultUtil<T> fail(Integer code, String message, T data) {ResultUtil<T> resultUtil = new ResultUtil<>();resultUtil.setCode(code);resultUtil.setMessage(message);resultUtil.setData(data);return resultUtil;}}

这种格式主要包含3部分:
1.code:状态码, 由后端统一定义各种返回结果的状态码 判断成功还是失败
2.message:描述信息 ,提示信息
3.data:返回的数据,例如列表数据

Person.java实体类修改一下不在需要get,set方法,但是得加上@Data

package com.demo.bean;import com.fasterxml.jackson.annotation.*;
import lombok.Data;import java.io.Serializable;
import java.util.regex.Pattern;@Data
public class Person implements Serializable {private String userId;private int age;}
    /**** 测试@RequestBody。要从请求体中获取数据* 有如下结果* 1.数据要在请求体中。* 2.数据的格式为JSON。content-type 的值是application/json* 3.只有post请求才允许在body中设置数据* **/@RequestMapping("/test3")public Object test3(@RequestBody Person person){return ResultUtil.success(person);}

结果如下:

在这里插入图片描述

这样写的前提下还要在pom中在加一个依赖

在这里插入图片描述

最后

送大家一句话:你大好青春,怕什么,只管向前跑

相关文章:

Springboot2.0快速入门(第一章)

目录 一&#xff0c;SpringBoot简介1.1&#xff0c;回顾什么是Spring1.2&#xff0c;Spring是如何简化Java开发的1.3&#xff0c;什么是SpringBoot 二&#xff0c;Hello&#xff0c;World2.1&#xff0c;准备工作2.2&#xff0c;创建基础项目说明2.3&#xff0c;创建第一个Hell…...

Flink流批一体计算(17):PyFlink DataStream API之StreamExecutionEnvironment

目录 StreamExecutionEnvironment Watermark watermark策略简介 使用 Watermark 策略 内置水印生成器 处理空闲数据源 算子处理 Watermark 的方式 创建DataStream的方式 通过list对象创建 ​​​​​​使用DataStream connectors创建 使用Table & SQL connectors…...

javeee spring cglib动态代理

cglib动态代理 依赖 <dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>3.2.4</version></dependency>代理类 package com.test.cglibProxy;import net.sf.cglib.proxy.Enhancer; import …...

【Docker】Dockerfile介绍

Dockerfile是一个文本文件&#xff0c;其中包含了一系列的指令&#xff0c;用于构建Docker镜像。这些指令可以用来自动化镜像的构建过程&#xff0c;并创建自定义镜像。 以下是一些常用的Dockerfile指令及其功能&#xff1a; FROM&#xff1a;指定基础镜像。这是Dockerfile中…...

两个hdfs之间迁移传输数据

本文参考其他大数据大牛的博文做了整理和实际验证&#xff0c;主要解决hdfs跨集群复制/迁移问题。 在hdfs数据迁移时总会涉及到两个hdfs版本版本问题&#xff0c;致力解决hdfs版本相同和不同两种情况的处理方式&#xff0c;长话短说&#xff0c;进正文。 distcp: hadoop自带的…...

C++ 缺失的数字

有n个数字&#xff0c;值就是1~n&#xff0c;现发现丢失了2个数字&#xff0c;请你根据剩余的n-2个数字&#xff0c;编程计算一下&#xff0c;缺失的是哪两个数字呢&#xff1f; &#xff08;使用桶排&#xff0c;标记输入过的数字&#xff09; #include<bits/stdc.h> us…...

JVM,JRE和JDK的区别

JVM&#xff0c;JRE和JDK的区别 JVM(Java Virtual Machine&#xff0c;Java虚拟机)JREJRE目录结构 JDK JVM(Java Virtual Machine&#xff0c;Java虚拟机) Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行&#xff0c;Java虚拟机中…...

合宙Air724UG LuatOS-Air LVGL API控件--日历 (Calendar)

日历 (Calendar) LVGL 提供了一个用来选择和显示当前日期的日历控件。 示例代码 – 高亮显示的日期 highlightDate lvgl.calendar_date_t() – 日历点击的回调函数 – 将点击日期设置高亮 function event_handler(obj, event) if event lvgl.EVENT_VALUE_CHANGED then da…...

[python]问题:pandas处理excel里的多个sheet

Pandas 可以很容易地处理 Excel 文件中的多个工作表。首先,你需要安装 pandas 和 openpyxl(用于读取 .xlsx 文件)库。你可以使用以下命令安装这两个库: pip install pandas openpyxl接下来,你可以使用以下代码来处理 Excel 文件中的多个工作表: import pandas as pd# 读…...

[MySQL] MySQL基础操作汇总

文章目录 前言1.数据库概述1.1 数据库相关概念1.2登录MySQL&#xff1a;1.3 MySQL常用命令1.4表&#xff1a;1.5SQL语句分类&#xff1a; 2.CRUD操作2.1 DQL1.基础查询基础查询&#xff08;简单查询&#xff09;条件查询&#xff1a;排序查询&#xff1a;分组查询&#xff1a;分…...

C语言每日一题 ---- 打印从1到最大的n位数(Day 1)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C语言天天练 &#x…...

2023-08-23 LeetCode每日一题(统计点对的数目)

2023-08-23每日一题 一、题目编号 1782. 统计点对的数目二、题目链接 点击跳转到题目位置 三、题目描述 给你一个无向图&#xff0c;无向图由整数 n &#xff0c;表示图中节点的数目&#xff0c;和 edges 组成&#xff0c;其中 edges[i] [ui, vi] 表示 ui 和 vi 之间有一…...

LLMs之Code:SQLCoder的简介、安装、使用方法之详细攻略

LLMs之Code&#xff1a;SQLCoder的简介、安装、使用方法之详细攻略 目录 SQLCoder的简介 1、结果 2、按问题类别的结果 SQLCoder的安装 1、硬件要求 2、下载模型权重 3、使用SQLCoder 4、Colab中运行SQLCoder 第一步&#xff0c;配置环境 第二步&#xff0c;测试 第…...

数学建模(四)整数规划—匈牙利算法

目录 一、0-1型整数规划问题 1.1 案例 1.2 指派问题的标准形式 2.2 非标准形式的指派问题 二、指派问题的匈牙利解法 2.1 匈牙利解法的一般步骤 2.2 匈牙利解法的实例 2.3 代码实现 一、0-1型整数规划问题 1.1 案例 投资问题&#xff1a; 有600万元投资5个项目&…...

openGauss学习笔记-47 openGauss 高级数据管理-权限

文章目录 openGauss学习笔记-47 openGauss 高级数据管理-权限47.1 语法格式47.2 参数说明47.3 示例 openGauss学习笔记-47 openGauss 高级数据管理-权限 数据库对象创建后&#xff0c;进行对象创建的用户就是该对象的所有者。数据库安装后的默认情况下&#xff0c;未开启三权分…...

开始MySQL之路——MySQL 事务(详解分析)

MySQL 事务概述 MySQL 事务主要用于处理操作量大&#xff0c;复杂度高的数据。比如说&#xff0c;在人员管理系统中&#xff0c;你删除一个人员&#xff0c;你即需要删除人员的基本资料&#xff0c;也要删除和该人员相关的信息&#xff0c;如信箱&#xff0c;文章等等&#xf…...

注解和class对象和mysql

注解 override 通常是用在方法上的注解表示该方法是有重写的 interface 表示一个注解类 比如 public interface override{} 这就表示是override是一个注解类 target 修饰注解的注解表示元注解 deprecated 修饰某个元素表示该元素已经过时了 1.不代表该元素不能用了&…...

【桌面小屏幕项目】ESP32开发环境搭建

视频教程链接&#xff1a; 【【有手就行系列】嵌入式单片机教程-桌面小屏幕实战教学 从设计、硬件、焊接到代码编写、调试 ESP32 持续更新2022】 https://www.bilibili.com/video/BV1wV4y1G7Vk/?share_sourcecopy_web&vd_source4fa5fad39452b08a8f4aa46532e890a7 一、esp…...

CSS 滚动容器与固定 Tabbar 自适应的几种方式

问题 容器高度使用 px 定高时&#xff0c;随着页面高度发生变化&#xff0c;组件展示的数量不能最大化的铺满&#xff0c;导致出现底部留白。容器高度使用 vw 定高时&#xff0c;随着页面宽度发生变化&#xff0c;组件展示的数量不能最大化的铺满&#xff0c;导致出现底部留白…...

IP 地址追踪工具

IP 地址跟踪工具是一种网络实用程序&#xff0c;允许您扫描、跟踪和获取详细信息&#xff0c;例如 IP 地址的 MAC 和接口 ID。IP 跟踪解决方案通过使用不同的网络扫描协议来检查网络地址空间来收集这些详细信息。一些高级 IP 地址跟踪器软件&#xff08;如 OpUtils&#xff09;…...

PCB设计规范-机插定位孔设计要求

核心要求1) 机插定位孔的孔径为4mm&#xff0c;只能是机械孔&#xff0c;孔内不能沉铜。2) 第一个机插定位孔位于PCB板长边的左下角&#xff0c;机插定位孔的中心与两板的距离都等于5mm。3) 第二机插定位孔仅位于PCB板长边的右下角&#xff0c;距离长边的板边5mm&#xff0c;离…...

性能调优与成本控制:Spring AI 的缓存、限流与模型降级策略

系列导读 你现在看到的是《Spring AI 企业级集成与场景实践:从零搭建智能应用》的第 8/10 篇,当前这篇会重点解决:提供一套完整的性能与成本优化工具箱,让 AI 应用在预算内高效运行。 上一篇回顾:第 7 篇《生产级部署:Spring AI 应用的 Docker 容器化与 Kubernetes 编排…...

告别手动操作!GSE魔兽世界宏编辑器:让技能释放像呼吸一样自然

告别手动操作&#xff01;GSE魔兽世界宏编辑器&#xff1a;让技能释放像呼吸一样自然 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. 项目地址: https://gitcode.com/gh_mirrors/gs/GSE-Adv…...

Overture:一站式AI应用开发框架,快速构建大模型服务

1. 项目概述&#xff1a;一个开箱即用的开源AI应用框架最近在折腾AI应用开发的朋友&#xff0c;估计都绕不开一个核心问题&#xff1a;如何快速、稳定地把一个大语言模型的能力&#xff0c;封装成一个可以对外提供服务的API&#xff0c;甚至是带界面的Web应用。从模型加载、推理…...

开源记忆增强系统mnemo-cortex:开发者的命令行知识管理利器

1. 项目概述&#xff1a;一个面向开发者的开源记忆增强系统如果你和我一样&#xff0c;每天被海量的代码片段、API文档、临时想法、会议纪要和待办事项淹没&#xff0c;那么“如何高效地记住并快速调用这些信息”就成了一个永恒的痛点。传统的笔记软件要么太重&#xff0c;要么…...

AI连接器SDK:统一接口简化多模型集成与开发

1. 项目概述与核心价值最近在折腾AI应用开发&#xff0c;特别是想把大语言模型的能力无缝集成到自己的业务系统里&#xff0c;相信很多开发者都遇到过类似的场景&#xff1a;想调用某个模型API&#xff0c;但发现不同厂商的接口规范、认证方式、返回格式千差万别&#xff1b;想…...

2026年南京GEO优化行业乱象解析:差异化痛点与行业合规发展建议

伴随生成式人工智能普及&#xff0c;GEO生成式引擎优化成为南京本地企业数字化布局的重要渠道。2026年本地传统线下企业、中小型工贸企业、服务业企业普遍入局AI内容优化赛道。目前南京GEO服务市场入局主体繁杂&#xff0c;包含传统SEO转型团队、小型个人工作室、本土科技企业、…...

Android Studio的安装及配置 创建项目编译、运行、调试、打包安装包

Android Studio安装 Android Studio是Google官方的 Android 应用开发集成环境&#xff08;IDE&#xff09;&#xff0c;基于 IntelliJ IDEA&#xff0c;支持 Windows/macOS/Linux&#xff0c;2013 年首次发布。 下载地址&#xff1a;https://developer.android.com/studio/ar…...

从专有格式到SVG:构建自动化设计资产转换工具链

1. 项目概述&#xff1a;从图标到矢量&#xff0c;一次格式转换的深度实践最近在整理一个前端项目的资源库&#xff0c;遇到了一个挺典型的问题&#xff1a;设计同学给过来一批图标&#xff0c;格式是.mew和.purpur。说实话&#xff0c;看到这俩后缀名我愣了一下&#xff0c;这…...

打卡信奥刷题(3259)用C++实现信奥题 P8652 [蓝桥杯 2017 国 C] 小数第 n 位

P8652 [蓝桥杯 2017 国 C] 小数第 n 位 题目描述 我们知道&#xff0c;整数做除法时&#xff0c;有时得到有限小数&#xff0c;有时得到无限循环小数。 如果我们把有限小数的末尾加上无限多个 000&#xff0c;它们就有了统一的形式。 本题的任务是&#xff1a;在上面的约定下&a…...