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结构和格式
- 常用框架 阿里 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快速入门(第一章)
目录 一,SpringBoot简介1.1,回顾什么是Spring1.2,Spring是如何简化Java开发的1.3,什么是SpringBoot 二,Hello,World2.1,准备工作2.2,创建基础项目说明2.3,创建第一个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是一个文本文件,其中包含了一系列的指令,用于构建Docker镜像。这些指令可以用来自动化镜像的构建过程,并创建自定义镜像。 以下是一些常用的Dockerfile指令及其功能: FROM:指定基础镜像。这是Dockerfile中…...

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

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

JVM,JRE和JDK的区别
JVM,JRE和JDK的区别 JVM(Java Virtual Machine,Java虚拟机)JREJRE目录结构 JDK JVM(Java Virtual Machine,Java虚拟机) Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,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:1.3 MySQL常用命令1.4表:1.5SQL语句分类: 2.CRUD操作2.1 DQL1.基础查询基础查询(简单查询)条件查询:排序查询:分组查询:分…...

C语言每日一题 ---- 打印从1到最大的n位数(Day 1)
本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 &#x…...

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

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

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

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

开始MySQL之路——MySQL 事务(详解分析)
MySQL 事务概述 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等…...

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

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

CSS 滚动容器与固定 Tabbar 自适应的几种方式
问题 容器高度使用 px 定高时,随着页面高度发生变化,组件展示的数量不能最大化的铺满,导致出现底部留白。容器高度使用 vw 定高时,随着页面宽度发生变化,组件展示的数量不能最大化的铺满,导致出现底部留白…...

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

最新企业网盘产品推荐榜发布
随着数字化发展,传统的文化存储方式已无法跟上企业发展的步伐。云存储的出现为企业提供了新的文件管理存储模式。企业网盘作为云存储的代表性工具,被越来越多的企业所青睐。那么在众多企业网盘产品中,企业该如何找到合适的企业网盘呢…...

实用的面试经验分享:程序员们谈论他们的面试历程
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

6.oracle中listagg函数使用
1. 作用 可以实现行转列,将多列数据聚合为一列,实现数据的压缩 2. 语法 listagg(measure_expr,delimiter) within group ( order by order_by_clause); 解释: measure_expr可以是基于任何列的表达式 delimiter分隔符,…...

习题练习 C语言(暑期)
编程能力小提升! 前言一、转义字符二、重命名与宏定义三、三目运算符四、计算日期到天数转换五、计算字符串长度六、宏定义应用七、const常量八、C语言基础九、const常量(二)十、符号运算十一、记负均正十二、SWITCH,CASE十三、错…...

C++中虚函数表的概念
当一个类对象指针调用虚函数时,这就涉及到 运行时多态 的概念。这意味着实际调用的函数取决于对象的实际类型,而不仅仅是指针的静态类型。 假设我们有以下的类层次结构: class Base { public:virtual void print() {std::cout << &qu…...

代码随想录算法训练营第四十八天 | 198.打家劫舍,213.打家劫舍II,337.打家劫舍III
代码随想录算法训练营第四十八天 | 198.打家劫舍,213.打家劫舍II,337.打家劫舍III 198.打家劫舍213.打家劫舍II337.打家劫舍III 198.打家劫舍 题目链接 视频讲解 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金ÿ…...

uniapp项目实战系列(1):导入数据库,启动后端服务,开启代码托管
目录 前言前期准备1.数据库的导入2.运行后端服务2.1数据库的后端配置2.2后端服务下载依赖,第三方库2.3启动后端服务 3.开启gitcode代码托管 ✨ 原创不易,还希望各位大佬支持一下! 👍 点赞,你的认可是我创作的动力&…...

在互联网+的背景下,企业如何创新客户服务?
随着互联网的发展,开始数字化转型的潮流,移动互联网平台为各个行业带来了发展的新方向。企业有了移动互联网的加持,为客户提供了更好的服务。当移动互联网平台能够为客户提供更好的用户体验时,相应地,客户也给企业带来…...

国内的化妆品核辐射检测
化妆品核辐射物质检测是指检测化妆品中的放射性物质,包括放射性核素和放射性同位素。这些放射性物质主要来源于环境中的放射性污染,如空气、水和土壤中的放射性物质,以及化妆品生产过程中的放射性污染,如原料、设备、工艺等。化妆…...

春秋云镜:CVE-2019-9042(Sitemagic CMS v4.4 任意文件上传漏洞)
一、题目 靶标介绍: Sitemagic CMS v4.4 index.php?SMExtSMFiles 存在任意文件上传漏洞,攻击者可上传恶意代码执行系统命令。 进入题目: admin/admin /index.php?SMExtSMFiles&SMTemplateTypeBasic&SMExecModeDedicated&SMFil…...