spring boot快速入门
时间:2024-03-27 07:31:33 来源:网络cs 作者:往北 栏目:ERP系统 阅读:
什么是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/jsonproduces: 响应的媒体类型params,headers: 请求的参数及请求头的值接口示例
二者等价
Method匹配
RequestMethod.GET、RequestMethod.POST、RequestMethod.DELETE、
RequestMethod.PUT等值,分别对应HTTP请求的MethodMethod匹配也可以使用@GetMapping、@PostMapping等注解代替。
参数传递
@RequestParam将请求参数绑定到控制器的方法参数上,接收的参数来自HTTP请求体或请求url的QueryString,当请求的参数名称与Controller的业务方法参数名称一致时,@RequestParam可以省略@PathVaraible:用来处理动态的URL,URL的值可以作为控制器中处理方法的参数@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type:application/x-www-form-urlencoded编码格式的数据,比如:
application/json
、application/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系统中非常常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现。总结起来,拦截器大致有以下几种使用场景:
权限检查:如登录检测,进入处理程序检测是否登录,如果没有,则直接返回登录页面。性能监控:有时系统在某段时间莫名其妙很慢,可以通过拦截器在进入处理程序之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有提取Locale、Theme信息等,只要是多个处理程序都需要的,即可使用拦截器实现Spring Boot定义了HandlerInterceptor接口来实现自定义拦截器的功能
HandlerInterceptor接口定义了preHandle、postHandle、afterCompletion三种方法,通过重写这三种方法实现请求前、请求后等操作
通常我们新建一个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.*;@RestControllerpublic 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@EnableWebMvcpublic 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风格,具体的方法可以自行搜索
本文链接:https://www.kjpai.cn/news/2024-03-27/149263.html,文章来源:网络cs,作者:往北,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
上一篇:[C++] 多态(下) -- 多态原理 -- 动静态绑定
下一篇:返回列表