SpringBoot(1)

Spring Boot简介

在这里插入图片描述
Spring,springMVC,springBoot 之间的关系:
Spring 是一个“容器”;
Spring MVC 是基于 Spring 的一个 MVC 框架;
Spring Boot 是基于 Spring4/5 的条件注册的一套快速开发整合包。致力于微服务领域。

环境要求:
基于springBoot2.x,环境以下:jdk1.8 or later ,Gradle 4+ or Maven 3.2+
在这里插入图片描述

1 入门

自动创建SpringBoot应用:
官网地址:http://start.spring.io/
在这里插入图片描述
配置好之后直接generate project,会得到一个压缩包,解压用idea导入即可。
idea导入:
在这里插入图片描述
Controller写法一致:
在这里插入图片描述
在这里插入图片描述
手动新建:
new–file–Spring Initializr
spring-web

SpringBoot 是如何做到导入一个启动依赖就可以自动导入依赖的 jar 包?

注意:对于自动创建的 boot 项目我们主要需要看看 pom.xml 中的规范!还有需要特别注意 一个 boot 项目中只能有一个启动器。

2 接口开发

2.1 常用注解解释

@RestController = @Controlle + @ResponseBody
@SpringBootApplication = @Configuration+@EnableAutoConfiguration+@ComponentScan

@GetMapping = @RequestMapping(method = RequestMethod.GET)
@PostMapping = @RequestMapping(method = RequestMethod.POST)
@PutMapping = @RequestMapping(method = RequestMethod.PUT)
@DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)

在这里插入图片描述
开发工具:postman

接口GET请求实战

json框架以及结果处理
常用框架:
阿里的 fastjson,谷歌的 gson 等,JavaBean 序列化为 Json,性能:
Jackson > FastJson > Gson > Json-lib 同个结构。Jackson、FastJson、Gson 类库各有优点,各有自己的专长
空间换时间,时间换空间

常用的结果处理方式:
@JsonIgnore
指定敏感字段不暴露给调用方
@JsonProperty
给敏感字段指定一个别名,目的是为了防止恶意探测攻击(不让调用方知道具体字段的含义)
@JsonFormat
转换日期
@JsonInclude
主要用于排除非空字段

2.2 数据校验

加依赖

<!--数据校验-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
	<version>2.2.2.RELEASE</version>
</dependency>

pojo加验证规则
在这里插入图片描述
controller加注解@Validated
在这里插入图片描述

2.3 目录结构

src/main/java:存放代码
src/main/resources
static: 存放静态文件,比如 css、js、image, (访问方式 http://localhost:8080/js/main.js)
templates:存放静态页面 jsp,html,tpl
config:存放配置文件,application.properties
resources:额外的一些资源
public:公共的一些文件
在这里插入图片描述

2.4 渲染静态页面

官方推荐Thymeleaf模板引擎

  1. 导入依赖
<!--模板引擎-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
	<version>2.2.2.RELEASE</version>
</dependency>
  1. 基本配置application.properties
    在这里插入图片描述
    在这里插入图片描述
# 开发环境设置为false
spring.thymeleaf.cache=false
spring.thymeleaf.mode=HTML5
# 静态资源路径配置
spring.resources.static-location=classpath"/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/upload/
# 配置文件上传
spring.servlet.multipart.max-file-size=2MB
  1. controller层
    在这里插入图片描述
    不要写@RestController
  2. 页面
    在这里插入图片描述
    页面放在templates下

同一个静态资源文件加载顺序
Spring Boot 默认会挨个从META/resources > resources > static > public 里面找是否存在相应的资源,如果有则直接返回。不会再去其他文件夹找相应资源了。
比如:http://localhost:8080/test.js 去访问一个 test.js,那么就会 springboot 就会依次去
resources>static>public 下面找,如果找不到则直接报错。(侧面可以看出springboot默认是不会去config.templates下面找资源的)

2.5 文件上传
  1. application.properties配置文件上传
    在这里插入图片描述
  2. controller层
    应该封装成工具类
@RestController
public class UploadController {
    @PostMapping("/upload/header")
    public JsonResult upload(MultipartFile header) {
        if(header.isEmpty()) {
            return new JsonResult(4002,"文件为空");
        }
        try {
            // 获取文件名
            String fileName = header.getOriginalFilename();
            // 处理后缀
            // 处理文件保存的路径
            // 文件名
            // 文件保存路径
            String path = "E:\\IDEAspring\\myfirst\\src\\main\\resources\\upload";
            // 抽象出文件对象
            File uploadPath = new File(path);
            File uploadFile = new File(uploadPath, fileName);
            // 上传
            header.transferTo(uploadFile);
            return new JsonResult(200,"上传成功");
        } catch (IOException e) {
            e.printStackTrace();
            return new JsonResult(4004,e.getMessage());
        }
    }
}
2.6 Jar包运行方式

打jar包:maven—Lifecyle—双击install
打开Terminal,在终端运行:
dir:打开目录
cd target:进入文件夹
java -jar myfirst-0.0.1-SNAPSHOT.jar:运行jar文件

从Tomcat中解脱了!!!

文件上传之后,怎么访问图片呢???
发现文件上传成功,但是没法访问,仔细分析了一下原来是:
我们现在是以 jar 包的形式运行的,文件怎么可能会上传到 jar 包里面去呢,所以需要单
独配置一个文件的静态资源路径。

解决:在 application.properties 中增加下面配置
在这里插入图片描述
最后,重新打包运行

项目大了之后应该选择单独的文件服务器,文件服务器:fastdfs,阿里云 oss,nginx 搭建一个简单的文件服务器。

3 热部署

https://blog.csdn.net/weixin_45044097/article/details/104458591

4 SpringBoot 配置文件详解

https://blog.csdn.net/weixin_45044097/article/details/104458936

5 单元测试

导入依赖(自动创建项目时自动加入)
@RunWith(SpringRunner.class)和 spring 的底层一致
@SpringBootTest(classes=SpringBootAutoApplication.class)指启动相关应用
在这里插入图片描述
版本不同,会有变化

6 全局异常处理

定义一个异常测试控制器

@RestController
public class ExceptionController {
	@GetMapping("/exception/msg")
	public String getMsg() {
		int i = 1/0;
		return "Message";
	}
}

出现错误页面,非常不友好

  1. 定义异常处理类
@RestControllerAdvice
public class MyExceptionHandler{
	// 可以捕获到所有Exception以及子类的异常
	@ExceptionHandler(Exception.class)
	JsonResult exceptionHandler(Exception e){
		return new JsonResult(1001,e.getMessage());
	}
	// 捕获自定义异常
	@ExceptionHandler(MyException.class)
    JsonResult myexceptionHandler(MyException e) {
        return new JsonResult(e.getCode(),e.getMsg());
    }
}

@RestControllerAdvice:定义一个全局的异常处理通知,返回 json
@ControllerAdvice:定义一个全局的异常处理通知,你不返回 json
@ExceptionHandler:定义异常处理助手,捕获指定异常

  1. 自定义异常
public class MyException extends RuntimeException {
    private Integer code;
    private String msg;
    public MyException(Integer code, String msg) {
        super(msg);
        this.code = code;
        this.msg = msg;
    }
    // getter,setter
}

7 拦截器

  1. MyInterceptor.java
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("------拦截前-------");
        return true;
    }
}
  1. InterceptorConfig.java
    @Configuration:代表配置类
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()) 
             // 要拦截的路径
            .addPathPatterns("/**")
            .excludePathPatterns("/exception/*");
        // 再加拦截器
    }
}
Filter 和 interceptor 的区别

Filter 是基于函数回调 doFilter(),而 Interceptor 则是基于 AOP 思想。

Filter 在只在 Servlet 前后起作用,而 Interceptor 够深入到方法前后、异常抛出前后等依赖于 Servlet 容器即 web 应用中,而 Interceptor 不依赖于 Servlet 容器所以可以运行在多种环境。
在接口调用的生命周期里,Interceptor 可以被多次调用,而 Filter 只能在容器初始化时调用一次。
filter过滤请求,拦截器拦截方法

Filter 和 Interceptor 的执行顺序

过滤前 --> 拦截前 --> action 执行 --> 拦截后 --> 过滤后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴能为您解答关于快速开发之SpringBoot的问题。下面是对您的问题的回答: 1)Maven搭建 Maven是一款Java项目的自动化构建工具,可以通过它来统一管理项目中的依赖库和构建过程,并可以自动进行打、测试、发布等操作。 要使用Maven,首先需要安装Maven。可以在Maven官网(https://maven.apache.org/)下载Maven二进制文件,并按照官方文档中的说明进行安装和配置。安装完成后,就可以在命令行中使用mvn命令来执行Maven相关的操作了。 2)SpringBoot搭建 SpringBoot是一款基于Spring框架的快速开发框架,可以通过它来快速搭建Web应用、RESTful API等。要使用SpringBoot,需要在Maven的项目配置文件(pom.xml)中添加SpringBoot相关的依赖库,并编写SpringBoot的配置文件。 3)SpringBoot基本使用 使用SpringBoot可以快速搭建一个Web应用或RESTful API。要使用SpringBoot,需要在Java代码中添加注解来标识需要自动配置的组件,比如@Controller、@Service、@Repository等。此外,还需要在SpringBoot的配置文件中设置相关的配置选项,比如数据库连接、日志输出等。 4)完成AI智能平台的后台服务搭建 要完成AI智能平台的后台服务搭建,可以使用SpringBoot来快速搭建一个RESTful API。在Java代码中,可以使用SpringMVC来处理HTTP请求,并使用Spring Data JPA来访问数据库。在SpringBoot的配置文件中,可以设置相关的数据库连接、日志输出等选项。同时,可以使用Spring Security来进行用户认证和授权,以保证系统的安全性。 希望我的回答能对您有所帮助。如果您还有其他问题,欢迎随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值