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

news2025/1/17 21:34:21

目录

  • 一,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中在加一个依赖

在这里插入图片描述

最后

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

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

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

相关文章

计算机网咯——性能指标

常见性能指标 1.速率 2.带宽 3.吞吐量 4.时延 [外链图片转存失败,源站可 5.时延带宽积 6.往返时间 7.利用率 8.丢包率

win10安装Docker Desktop,并修改存储目录

安装之前先看看自己电脑c盘剩余容量&#xff0c;如果小于30G&#xff0c;建议先配置下再安装 因为docker 安装时不提供指定安装路径和数据存储路径的选项&#xff0c;且默认是安装在C盘的。C盘比较小的&#xff0c;等docker运行久了&#xff0c;一大堆的东西放在上面容易导致磁…

Mysql B+树索引

一、联合索引 内节点中存储的是 目录项 记录 &#xff0c;叶子节点中存储的是 用户记录 &#xff08;由于不是聚簇索引&#xff0c;所以用户记录是不完整的&#xff0c;缺少 country 列的 值&#xff09;。这个 idx_name_birthday_phone_number 索引对应的 B 树中页面和记录的排…

Apifox下载安装步骤

我们先访问网址 https://apifox.com/?utm_sourcebaidu&utm_mediumsem&utm_campaign251430236&utm_content7810722111&utm_termapifox%E6%9F%A5%E7%9C%8B%E7%89%88%E6%9C%AC&bd_vid8323327349775096324 然后 这里这个免费下载已经写的这么明显了 那就直接点…

UVM知识点3

Vim 中如何去掉 ^M 字符&#xff1f; 基于 DOS/Windows 的文本文件在每一行末尾有一个 CR&#xff08;回车&#xff09;和 LF&#xff08;换行&#xff09;&#xff0c;而 UNIX 文本只有一个换行,即win每行结尾为\r\n&#xff0c;而linux只有一个\n如果win下的文档上传到linux…

时序预测 | MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比

时序预测 | MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比 目录 时序预测 | MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现基于PSO-BiLSTM、BiLSTM时间序列预测对比。 1.Matlab实现PSO-BiLSTM和BiLSTM…

无涯教程-Android - Activity

Activity代表具有用户界面的单个屏幕&#xff0c;就像Java的窗口或框架一样。Android Activity 是ContextThemeWrapper类的子类。 如果您使用过C&#xff0c;C或Java编程语言&#xff0c;那么您一定已经看到您的程序从 main()函数开始。与之非常相似&#xff0c;Android系统以 …

五、多表查询-4.3子查询-列子查询

一、概述 子查询返回的结果是一列&#xff08;可以是多行&#xff09;&#xff0c;这种子查询称为列子查询。 常用的操作符&#xff1a;in、not in、any、some、all 二、演示 【例1】查询“销售部”和“市场部”的所有员工信息 1、查询销售部和市场部的部门ID 返回的结果是…

highcharts 修改 箱线图每个箱子的颜色

在js中添加以下代码 plotOptions: {series: {colorByPoint: true},boxplot: {fillColor:null,colorBorPoint:true,colors: [red,#000000]),}}, 综合网上多方材料&#xff0c;得出

Linux之超强16进制命令:xxd(三十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

基于ssm+vue汽车售票网站源码和论文

基于ssmvue汽车售票网站源码和论文088 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让…

英文科技论文写作与发表-论文结构(第1章)

第1章 论文结构 不同科技领域论文的组织结构不尽相同。 各专业领域专家公认的一个要点是&#xff1a;论文的前一页半到两页最为重要&#xff0c;决定了读者是否愿意继续读下去&#xff0c;也是审稿人得出初步结论的依据。 着手之前&#xff0c;先组织论文结构&#xff0c;把…

基于web的仓库管理系统jsp商品进销存java源代码Mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的仓库管理系统 系统有2权限&#xff1a;管理…

软件测试面试题有什么经常被问到的?

软件测试面试&#xff0c;常问的问题如下&#xff1a; 1、自我介绍 2、公司的测试流程 3、测试用例设计方法的区别及应用场景 4、测试计划怎么写&#xff0c;包含哪些内容&#xff1f;和测试方案的区别是什么&#xff1f; 5、bug的处理机制和bug的定级 6、敏捷测试下的工作流程…

【漏洞复现】瑞友应用虚拟化系统 SQL注入

漏洞描述 瑞友天翼应用虚拟化系统&#xff08;GWT System&#xff09;是国内具有自主知识产权的应用虚拟化平台&#xff0c;是基于服务器计算&#xff08;Server-based Computing&#xff09;的应用虚拟化平台。瑞友天翼应用虚拟化系统存在SQL注入漏洞。 免责声明 技术文章…

谁能笑傲江湖:聊聊8月份中国数据库排行榜与国产数据库选型

引言 天下风云出我辈&#xff0c;一入江湖岁月催。 有人说&#xff0c;有数据库的地方&#xff0c;就有“江湖”。 曾经多少前辈满腔热血投入国产数据库事业中&#xff0c;悠悠数十载&#xff0c;又如白驹过隙&#xff0c;最终不知几家欢喜几家愁。 截止2023年8月份&#xf…

Spring 事务是什么 ?事务的传播机制?

目录 1. 什么是事务&#xff1f; 1. Spring 事务三大基础设施 1.1 PlatformTransactionManager 平台事务管理器 1.2 TransactionDefinition 事务属性定义 1.3 TransactionStatus 事务状态 3. Transaction 注解 4. Spring 事务角色 5. Transaction 注解属性 5.1 事务的回…

WebGPU加载Wavefront .OBJ模型文件

在开发布料模拟之前&#xff0c;我想使用 WebGPU 开发强大的代码基础。 这就是为什么我想从 Wavefront .OBJ 文件加载器开始渲染 3D 模型。 这样&#xff0c;我们可以快速渲染 3D 模型&#xff0c;并构建一个简单而强大的渲染引擎来完成此任务。 一旦我们有了扎实的基础&#x…

山西电力市场日前价格预测【2023-08-30】

日前价格预测 预测明日&#xff08;2023-08-30&#xff09;山西电力市场全天平均日前电价为317.95元/MWh。其中&#xff0c;最高日前电价为373.07元/MWh&#xff0c;预计出现在19: 45。最低日前电价为248.17元/MWh&#xff0c;预计出现在13: 30。 价差方向预测 1&#xff1a; 实…