spring boot快速入门_springboot-程序员宅基地

技术标签: spring  Java  spring boot  java  

什么是springboot

  • Spring Boot是由Pivotal团队提供的基于Spring的全新框架,旨在简化Spring应用的初始搭建和开发过程。
  • Spring Boot是所有基于Spring开发项目的起点。
  • Spring Boot就是尽可能地简化应用开发的门槛,让应用开发、测试、部署变得更加简单。

spring boot特点

  • 遵循“约定优于配置”的原则,只需要很少的配置或使用默认的配置。
  • 能够使用内嵌的Tomcat、Jetty服务器,不需要部署war文件
  • 提供定制化的启动器Starters,简化Maven配置,开箱即用。
  • 纯Java配置,没有代码生成,也不需要XML配置。
  • 提供了生产级的服务监控方案,如安全监控、应用监控、健康检测等。

快速创建spring boot应用

在这里插入图片描述

在这里插入图片描述
我们勾选springweb的话,它会帮助我们下载springMVC相关的依赖

目录结构
在这里插入图片描述

创建第一个程序

我们新建一个controller的包,然后新建一个HelloController的类在这里插入图片描述
这里@RestController会在下面控制器讲到

然后我们启动一下项目

在这里插入图片描述
找到spring boot的启动类,我们run即可
在这里插入图片描述
我们可以在浏览器运行一下
在这里插入图片描述

注意:浏览器只能接受get请求

端口我们可以进行更改
在这里插入图片描述

Spring Web

  • SpringBoot将传统Web开发的mvc、json、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置。
  • 创建SpringBoot项目勾选Spring Web选项后,会自动将spring-boot-starter- web组件加入到项目中。
  • spring-boot-starter-web启动器主要包括web、webmvc、json、tomcat等基础依赖组件,作用是提供Web开发场景所需的所有底层依赖。
  • webmvc为Web开发的基础框架,json为JSON数据解析组件,tomcat为自带 的容器依赖。

在这里插入图片描述

控制器

  • Spring Boot提供了@Controller和@RestController两种注解来标识此类负责 接收和处理HTTP请求。
  • 如果请求的是页面和数据,使用@Controller注解即可;如果只是请求数据, 则可以使用@RestController注解。

在这里插入图片描述

@Controller的用法

  • 示例中返回了hello页面和name的数据,在前端页面中可以通过${name}参数 获取后台返回的数据并显示。
  • @Controller通常与Thymeleaf模板引擎结合使用。

简单来说,@Controller用于前后端不分离的项目,例如JSP

在这里插入图片描述

这个return的hello返回的是一个html、或者是jsp,并不是单独的一个hello数据

@RestController的用法

默认情况下,@RestController注解会将返回的对象数据转换为JSON格式。

在这里插入图片描述

路由映射

  • @RequestMapping注解主要负责URL的路由映射。它可以添加在Controller 类或者具体的方法上。

  • 如果添加在Controller类上,则这个Controller中的所有路由映射都将会加上此映射规则,如果添加在方法上,则只对当前方法生效。

  • @RequestMapping注解包含很多属性参数来定义HTTP的请求映射规则。常用的属性参数如下:

  • value:请求URL的路径,支持URL模板、正则表达式

  • method: HTTP请求方法

  • consumes:请求的媒体类型(Content-Type),如application/json

  • produces: 响应的媒体类型

  • params,headers: 请求的参数及请求头的值

URL映射

  • @RequestMapping注解主要负责URL的路由映射。它可以添加在Controller类或者具体的方法上。
  • 如果添加在Controller类上,则这个Controller中的所有路由映射都将会加上此映射规则,如果添加在方法上,则只对当前方法生效
  • @RequestMapping注解包含很多属性参数来定义HTTP的请求映射规则。常用的属性参数如下:
  • value: 请求URL的路径,支持URL模板、正则表达式
  • method: HTTP请求方法
  • consumes: 请求的媒体类型(Content-Type),如application/json
  • produces: 响应的媒体类型
  • params,headers: 请求的参数及请求头的值

接口示例

在这里插入图片描述

二者等价
Method匹配

  • HTTP请求Method有GET、POST、PUT、DELETE等方式。HTTP支持的全部 Method
  • @RequestMapping注解提供了method参数指定请求的Method类型,包括
    RequestMethod.GET、RequestMethod.POST、RequestMethod.DELETE、
    RequestMethod.PUT等值,分别对应HTTP请求的Method
  • Method匹配也可以使用@GetMapping、@PostMapping等注解代替。
参数传递
  • @RequestParam将请求参数绑定到控制器的方法参数上,接收的参数来自HTTP请求体或请求url的QueryString,当请求的参数名称与Controller的业务方法参数名称一致时,@RequestParam可以省略
  • @PathVaraible:用来处理动态的URL,URL的值可以作为控制器中处理方法的参数
  • @RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type:
    application/x-www-form-urlencoded编码格式的数据,比如:application/jsonapplication/xml等类型的数据

在这里插入图片描述
在这里插入图片描述
我们进行一个参数的拼接
在这里插入图片描述
需要注意的是,这里的传参和我们接受的参数名字一定是一一对应的,要是对应的话,我们是接收不到的
在这里插入图片描述

在这里插入图片描述
这种情况我们可以加一个映射
在这里插入图片描述

在这里插入图片描述
但是这样的话,我们的参数就变为必传的了,那么怎么设置非必传呢
在这里插入图片描述
我们加上required = false即可

POST请求

我们如果想发起post请求就不能通过浏览器直接发起请求了,需要通过第三方工具来发起,例如postman、apipost、apifox等
这里我就先用apipost了

我们通过@PostMapping注解来发送post请求
在这里插入图片描述
在这里插入图片描述

Post请求也是可以加参数的
Post请求的参数一般是放在请求体当中的
在这里插入图片描述
在这里插入图片描述
如果还是想放在参数里的话,也是可以的

如果我们的参数特别多,我们会放在一个对象当中
在这里插入图片描述
在这里插入图片描述
这就是我们想要的参数
在这里插入图片描述
在这里插入图片描述

注意如果没有重写对象的toString()方法,则会默认打印对象的地址。在这个例子中,打印出来的是User对象的地址,后面的一长串类似于“73018e8a”的字符就是该对象在内存中的地址,而不是对象的属性值。

所以我们加上tostring方法
在这里插入图片描述
在这里插入图片描述
这样就好了

有的时候,前端传过来的是json数据的格式,那么我们需要加一个RequestBody注解
在这里插入图片描述
在这里插入图片描述

spring boot文件上传

静态资源访问

  • 使用IDEA创建Spring Boot项目,会默认创建出classpath:/static/目录,静态 资源一般放在这个目录下即可。

  • 如果默认的静态资源过滤策略不能满足开发需求,也可以自定义静态资源过滤策略。

  • 在application.properties中直接定义过滤规则和静态资源位置:在这里插入图片描述

  • 过滤规则为/static/**,静态资源位置为classpath:/static/
    在这里插入图片描述
    在这里插入图片描述
    我们可以直接访问

文件上传原理

  • 表单的enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
  • 当表单的enctype=“application/x-www-form-urlencoded”(默认)时,form表单中的数据格式为:key=value&key=value
  • 当表单的enctype="multipart/form-data"时,其传输数据形式如下

在这里插入图片描述

设置文件大小

  • Spring Boot工程嵌入的tomcat限制了请求的文件大小,每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。
  • 要更改这个默认值需要在配置文件(如application.properties)中加入两个配置

在这里插入图片描述
在这里插入图片描述
创建目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们想让用户在浏览器当中访问到怎么做
在这里插入图片描述
这样就可以了

拦截器

拦截器在Web系统中非常常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现。总结起来,拦截器大致有以下几种使用场景:

  1. 权限检查:如登录检测,进入处理程序检测是否登录,如果没有,则直接返回登录页面。
  2. 性能监控:有时系统在某段时间莫名其妙很慢,可以通过拦截器在进入处理程序之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间
  3. 通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有提取Locale、Theme信息等,只要是多个处理程序都需要的,即可使用拦截器实现

Spring Boot定义了HandlerInterceptor接口来实现自定义拦截器的功能

HandlerInterceptor接口定义了preHandlepostHandleafterCompletion三种方法,通过重写这三种方法实现请求前、请求后等操作

通常我们新建一个interceptor包,里面放拦截器的类
在这里插入图片描述
但是这样还不能生效,我们需要进行配置
新建config包,建立WebConfig类
在这里插入图片描述
这样的话,就会对user下的路径进行拦截

RESTful

RESTful是目前流行的互联网软件服务架构设计风格。

  • 每一个URI代表一种资源
  • 客户端使用GET、POST、PUT、DELETE四种表示操作方式的动词对服务端资源进行操作:GET用于获取资源,POST用于新建资源(也可以用于更新资源),PUT用于更新资源,DELETE用于删除资源。
  • 通过操作资源的表现形式来实现服务端请求操作。
  • 资源的表现形式是JSON或者HTML。
  • 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都包含必需的信息。

两个关键特性:

  • 安全性:当我们使用GET操作获取资源时,不会引起资源本身的改变,也不会引起服务器状态的改变。
  • 幂等性:幂等的方法保证了重复进行一个请求和一次请求的效果相同

在这里插入图片描述

状态码分为以下5个类别:

  • 1xx:信息,通信传输协议级信息
  • 2xx:成功,表示客户端的请求已成功
  • 3xx:重定向,表示客户端必须执行一些其他操作才能完成其请求
  • 4xx:客户端错误,此类错误状态码指向客户端
  • 5xx:服务器错误,服务器负责这写错误状态码

Spring Boot实现RESTful API

@GetMapping:处理GET请求,获取资源。
@PostMapping:处理POST请求,新增资源。
@PutMapping:处理PUT请求,更新资源。
@DeleteMapping:处理DELETE请求,删除资源。
@PatchMapping:处理PATCH请求,用于部分更新资源。

示例

package com.example.demo.demos.web.controller;

import com.example.demo.demos.web.entity.User;
import org.springframework.web.bind.annotation.*;


@RestController
public class UserController {
    
    @GetMapping(value = "user/{id}")
    public String getUserById(@PathVariable int id){
    
        System.out.println(id);
        return "根据ID获取用户信息";
    }

    @PostMapping(value = "/user")
    public String save(User user){
    
        return "添加用户";
    }

    @PutMapping(value = "/user")
    public String update(User user){
    
        return "更新用户";
    }

    @DeleteMapping(value = "/user/{id}")
    public String deleteById(@PathVariable int id){
    
        System.out.println(id);
        return "根据ID删除用户";
    }
}

Swagger

Swagger能够自动生成完善的RESTful API文档,同时并根据后台代码的修改同步更新,同时提供完整的测试页面来调试API。

导入依赖

<!-- Swagger -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

创建配置类

在这里插入图片描述

package com.example.demo.demos.web.config;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Controller
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig implements WebMvcConfigurer {
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    

        registry.addResourceHandler("/**").addResourceLocations(
                "classpath:/static/");
        registry.addResourceHandler("swagger-ui.html").addResourceLocations(
                "classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
        WebMvcConfigurer.super.addResourceHandlers(registry);
    }

    @Bean
    public Docket createRestApi() {
    
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                // com包下所有API都交给Swagger2管理
                .apis(RequestHandlerSelectors.basePackage("com"))
                .paths(PathSelectors.any()).build();
    }

      API文档页面显示信息
    private ApiInfo apiInfo() {
    
        return new ApiInfoBuilder()
                .title("演示项目")//标题
                .description("学习")//描述
                .version("1.0")//版本
                .build();
    }
}


最后访问:http://localhost:8080/swagger-ui.html即可
在这里插入图片描述
但是可能会乱码,所以可能需要加一个配置
在这里插入图片描述
在这里插入图片描述
这样就没问题了

Swagger常用注解

Swagger提供了一系列注解来描述接口信息,包括接口说明、请求方法、请求 参数、返回信息等

在这里插入图片描述
当然,你可以用swagger-bootstrap-ui来换一种UI风格,具体的方法可以自行搜索
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_59816940/article/details/130665983

智能推荐

在ubuntu 8.04下安装Oracle 11g二-程序员宅基地

文章浏览阅读408次。 在ubuntu 8.04下安装Oracle 11g2008年05月22日 星期四 11:02oracle 11g 数据库虽然提供了linux x86的版本,但是支持的linux版本只有Red Hat,Novell and Solaris 这几个,debian 和 ubuntu 不在支持之列,所以在ubuntu下安装就相对麻烦一些,请照着下文的方法一步一步的安装,不

初一计算机知识点下册,初一英语下册语法知识点全汇总-程序员宅基地

文章浏览阅读166次。新东方在线中考网整理了《初一英语下册语法知识点全汇总》,供同学们参考。一. 情态动词can的用法can+动词原形,它不随主语的人称和数而变化。1. 含有can的肯定句:主语+can+谓语动词的原形+其他。2. 含有can的否定句:主语+can't+动词的原形+其他。3. 变一般疑问句时,把can提前:Can+主语+动词原形+其他? 肯定回答:Yes,主语+can。否定回答:No,主语+can't...._七年级下册计算机知识点

NX/UG二次开发—其他—UFUN函数调用Grip程序_uf调用grip-程序员宅基地

文章浏览阅读3k次。在平时开发中,可能会遇到UFUN函数没有的功能,比如创建PTP的加工程序(我目前没找到,哪位大神可以指点一下),可以使用Grip创建PTP,然后用UFUN函数UF_call_grip调用Grip程序。具体如下截图(左侧UFUN,右侧Grip程序):..._uf调用grip

Android RatingBar的基本使用和自定义样式,kotlin中文教程_ratingbar样式修改-程序员宅基地

文章浏览阅读156次。第一个:原生普通样式(随着主题不同,样式会变)第二个:原生普通样式-小icon第三个:自定义RatingBar 颜色第四个:自定义RatingBar DrawableRatingBar 各样式实现===============原生样式原生样式其实没什么好说的,使用系统提供的style 即可<RatingBarstyle="?android:attr/ratingBarStyleIndicator"android:layout_width=“wrap_cont.._ratingbar样式修改

OpenGL环境搭建:vs2017+glfw3.2.1+glad4.5_vs2017的opengl环境搭建(完整篇)-程序员宅基地

文章浏览阅读4.6k次,点赞6次,收藏11次。安装vs2017:参考vs2017下载和安装。安装cmake3.12.3:cmake是一个工程文件生成工具。用户可以使用预定义好的cmake脚本,根据自己的选择(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。可以从它官方网站的下载页上获取。这里我选择的是Win32安装程序,如图所示:然后就是运行安装程序进行安装就行。配置glfw3...._vs2017的opengl环境搭建(完整篇)

在linux-4.19.78中使用UBIFS_ubifs warning-程序员宅基地

文章浏览阅读976次。MLC NAND,UBIFS_ubifs warning

随便推点

计算机系统内存储器介绍,计算机系统的两种存储器形式介绍-程序员宅基地

文章浏览阅读2.2k次。计算机系统的两种存储器形式介绍时间:2016-1-6计算机系统的存储器一般应包括两个部分;一个是包含在计算机主机中的主存储器,简称内存,它直接和运算器,控制器及输入输出设备联系,容量小,但存取速度快,一般只存放那些急需要处理的数据或正在运行的程序;另一个是包含在外设中的外存储器,简称外存,它间接和运算器,控制器联系,存取速度虽然慢,但存储容量大,是用来存放大量暂时还不用的数据和程序,一旦要用时,就..._计算机存储器系统采用的是主辅结构,主存速度快、容量相对较小,用于 1 分 程序,外

西门子PLC的编程工具是什么?_西门子plc编程软件-程序员宅基地

文章浏览阅读5.6k次。1. STEP 7(Simatic Manager):STEP 7或者Simatic Manager是西门子PLC编程最常用的软件开发环境。4. STEP 7 MicroWin:STEP 7 MicroWn是一款专门针对微型PLC(S7-200系列PLC)的编程软件,是Simatic Manager的简化版。如果需要与PLC系统配合使用,则需要与PLC编程工具进行配合使用。除了上述软件之外,西门子还提供了一些配套软件和工具,如PLC模拟器、硬件调试工具等,以帮助PLC编程人员快速地进行调试和测试。_西门子plc编程软件

HashMap扩容_hashma扩容-程序员宅基地

文章浏览阅读36次。【代码】HashMap扩容。_hashma扩容

Eclipse maven项目中依赖包不全,如何重新加载?_maven资源加载不全,怎么重新加载-程序员宅基地

文章浏览阅读2.9k次。1mvn dependency:copy-dependencies2 项目右键 -> Maven -> Disable Maven Nature3 项目右键 -> Configure -> Convert to Maven Project_maven资源加载不全,怎么重新加载

mysql dml全称中文_MySQL语言分类——DML-程序员宅基地

文章浏览阅读527次。DMLDML的全称是Database management Language,数据库管理语言。主要包括以下操作:insert、delete、update、optimize。本篇对其逐一介绍INSERT数据库表插入数据的方式:1、insert的完整语法:(做项目的过程中将字段名全写上,这样比较容易看懂)单条记录插入语法:insert into table_name (column_name1,......_dml的全称是

【小工匠聊Modbus】04-调试工具-程序员宅基地

文章浏览阅读136次。可以参考: http://git.oschina.net/jrain-group/ 组织下的Java Modbus支持库Modbus-系列文章1、虚拟成对串口(1)下载虚拟串口软件VSPD(可在百度中搜索)image.png(2)打开软件,添加虚拟串口。在设备管理中,看到如下表示添加成功。..._最好用的 modebus调试工具

推荐文章

热门文章

相关标签