springboot框架有哪些技术_Springboot常用注解

springboot框架有哪些技术_Springboot常用注解✍、SpringBoot框架技术总结(一)1、SpringBoot简介我们之前的SSM还是使用起来不够爽。还需要写很多的配置才能进行正常的使用。实现一个功能需要引入很多的依赖,尤其是要自己去维护依赖的版本,特别容易出现依赖冲突等问题。SpringBoot就能很好的解决上述问题。中文文档:https://doc.springcloud.io/spring-boot/index.html1.1、SpringBoot是什么SpringBoot是基于Spring开发的全新框架,相当于对Spri

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

✍、SpringBoot框架技术总结(一)

?SpringBoot框架技术总结 地址
?SpringBoot框架技术总结(一) https://blog.csdn.net/Augenstern_QXL/article/details/120802556
?SpringBoot框架技术总结(二) https://blog.csdn.net/Augenstern_QXL/article/details/120816431
?SpringBoot框架技术总结(三) https://blog.csdn.net/Augenstern_QXL/article/details/120866816
?SpringBoot框架技术总结(四) https://blog.csdn.net/Augenstern_QXL/article/details/120866908
?SpringBoot框架技术总结(五) https://blog.csdn.net/Augenstern_QXL/article/details/120867244

1、SpringBoot简介

我们之前的SSM还是使用起来不够爽。

  • 还需要写很多的配置才能进行正常的使用。
  • 实现一个功能需要引入很多的依赖,尤其是要自己去维护依赖的版本,特别容易出现依赖冲突等问题。
  • SpringBoot就能很好的解决上述问题。
  • 中文文档:https://doc.springcloud.io/spring-boot/index.html

1.1、SpringBoot是什么

Spring Boot是基于Spring开发的全新框架,相当于对Spring做了又一层封装。

  • 其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从
    而使开发人员不再需要定义样板化的配置。(自动配置)
  • 并且对第三方依赖的添加也进行了封装简化。(起步依赖)

所以Spring能做的他都能做,并且简化了配置。并且还提供了一些Spring所没有的比如:

  • 内嵌web容器,不再需要部署到web容器中
  • 提供准备好的特性,如指标、健康检查和外部化配置

最大特点:自动配置、起步依赖

1.2、快速构建SpringBoot项目

  1. 新建 Spring Initializr

在这里插入图片描述

  1. 选择版本和 Spring Web 依赖

在这里插入图片描述

  1. 点击 Finish 即可

在这里插入图片描述

1.2.1、阿里云镜像

使用 Spring Initializr 方式构建 Spring Boot 项目,当网络不稳定时,经常会出现无法连接或连接超时的问题,导致项目无法创建或创建失败。

我们可以使用 http://start.aliyun.com 镜像地址创建项目,如下图所示

在这里插入图片描述

1.3、自己构建SpringBoot项目

上述IDEA快速构建项目

  1. 新建普通 Maven 项目

在这里插入图片描述

  1. 继承父工程

    在 pom.xml 中添加一下配置,继承 spring-boot-starter-parent 这个父工程

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
</parent>
  1. 添加依赖

    在 pom.xml 导入如下依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
  1. 创建启动类

    创建一个类,在其上加上 @SpringBootApplication 注解标识为启动类

@SpringBootApplication
public class HelloApplication { 
   
    public static void main(String[] args) { 
   
        SpringApplication.run(HelloApplication.class,args);
    }

}
  1. 定义 Controller

    创建Controller 包,Controller 要放在启动类所在包

在这里插入图片描述

@RestController         // 相当于 @Controller + @ResponseBody
public class HelloController { 
   

    @RequestMapping("/hello")
    public String hello(){ 
   
        return "Hello SpringBoot";
    }
}
  1. 启动测试

    直接运行启动类的 main 方法即可,然后访问 localhost:80/hello

在这里插入图片描述

1.4、打包运行

我们可以把 springboot 的项目打成 jar 包直接去运行。

  1. 添加 maven 插件 spring-boot-maven-plugin
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  1. maven 打包

在这里插入图片描述

  1. 在 cmd 命令行中启动 jar 包

在这里插入图片描述

  1. 在浏览器访问 localhost:80/hello 即可

1.5、修改banner

也就是更改启动时显示的字符拼成的字母,也就是 banner 图案

  1. 百度SpringBoot banner 在线生成工具:https://www.bootschool.net/ascii ,这个网站生成

  2. 到项目下的 resources 目录下新建一个 banner.txt 即可

  3. 将生成的拷贝到 banner.txt 中即可

在这里插入图片描述

2、SpringBoot国际化

在 Web 开发中,国际化支持通常是做国际化网站都需要考虑的一个问题,应用程序会涉及到页面的多语言化支持,例如页面可以切换中文简体、英文、日文等语言。Spring Boot 为国际化提供了强有力的支持,同时在开发 Web 应用程序的时候,请求处理过程中发生错误也是非常常见的情况、往往是需要通过一个统一的异常处理来保证客户端能够收到友好的提示。

2.1、SpringBoot国际化支持

国际化是一个使应用程序适应不同语言和区域而无需对源代码进行工程更改的过程。用它来说,国际化是对本地化的准备。国际化实际上就是在利用浏览器语言,或者页面中的中英文切换,将页面的文字在其他语言和中文进行切换。

SpringBoot实现国际化的步骤如下:

  1. 编写多语言国际化文件

    在项目的 resources 目录创建名称为 i18n的文件夹,并在该文件夹中根据需要编写对应的多语言国际化文件 login.properties、login_zh_CN.properties 和 login_en_US.properties 文件,代码如下所示:

  • login.properties
login.password=密码
login.remeber=记住我
login.btn=登录
login.tip=请登录
login.username=用户名
  • login_zh_CN.properties
login.password=密码
login.remeber=记住我
login.btn=登录
login.tip=请登录
login.username=用户名
  • login_en_US.properties
login.password=Password
login.remeber=Remember Me
login.btn=sign in
login.tip=Please sign in
login.username=UserName

在这里插入图片描述

​ 如图方式,我们创建3个文件,分别是无语言配置时候生效的 login.properties ;中文生效的 login_zh_CN.properties ,英文生效的 login_en_US.properties

​ 以下划线的组合:文件名 _ 区域 _语言.properties,当我们这样命名生成文件后,IDEA也会帮我们识别这是个国际化配置包,自动转换成如下的模式:

在这里插入图片描述

​ 当变成如上图所描述的模式时,我们再需要添加配置文件,直接选中包右键 new 即可,如下图所示:

在这里插入图片描述

在这里插入图片描述

​ 我们需要在这些配置文件里做些改动,先点击 login_zh_CN的配置文件,然后点击下边如图所示的 Resource Bundle 的按钮,切换编辑模式

在这里插入图片描述

​ 按照如图的方法,点击加号,添加一个 key,命名为 login.tip (在页面中使用)

在这里插入图片描述

​ 接下来按照我们页面需要转换的量,来做配置,如下图

在这里插入图片描述

  1. 指定国际化参数设置

    application.properties 配置文件中指定国际化参数设置

#指定国际化基类名
spring.message.basename=i18n.login

上述代码中,根据国际化配置文件位置和名称,在项目全局配置文件中使用 spring.message.basename=i18n.login 设置了自定义国际化文件的基础名。其中,i18n表示国际化文件相对项目类路径 resources 的位置,login 表示多语言文件的前缀名。如果开发者完全按照 SpringBoot 默认识别机制,在项目类路径 resources 下编写 message.properties 等国际化文件,可以省略国际化文件基础名的设置。

  1. 使用国际化属性

    在 html页面中使用 #{} 引用国际化属性

<title th:text="#{login.tip}">Signin Template for Bootstrap</title>

<h1 th:text="#{login.tip}">
    Please Sign in
</h1>
  1. 中文乱码解决方案

    若在切换语言的过程中出现中文乱码,在 settings 设置 File Encoding 编码格式

在这里插入图片描述

  1. 在项目中定义区域解析器,在项目中创建名为 com.xxx.config 的包,并在该包下创建一个用于定制国际化功能区域信息解析器的自定义配置类 MyLocaResolver
@Configuration
public class MyLocalResolver implements LocaleResolver{ 
   
    /** * 自定义区域解析方式 * @param request * @return */
    @Override
    public Locale resolveLocale(HttpServletRequest request){ 
   
        // 获取页面手动切换传递的语言参数l
        String l = request.getParameter("l");
        // 获取请求头自动传递的语言参数Accept-Language
        String header = request.getHeader("Accept-Language");
        Local locale = null;
        // 如果手动切换参数不为空,就根据手动参数进行语言切换,否则默认根据请求头信息切换
        if(!StringUtils.isEmpty){ 
   
            // 拆分语言代码_国家代码
            String[] split = l.split("_");
            // 创建Locale对象
            locale = new Locale(split[0],split[1]);
        }else{ 
   
            // 拆分默认语言代码_国家代码
            String[] split = header.split(",");
            locale = new Locale(split[0],split[1]);
        }
        return locale;
    }
    
    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { 
   
        
    }
    
    // 将自定义的MyLocalResolver类重新注册为一个类型LocaleResolver的Bean组件
    @Bean
    public LocaleResolver localeResolver(){ 
   
        return new MyLocalResolver();
    }
}

上述代码中,MyLocalResovler 配置类实现类LocaleResolver接口,并重写了 LocaleResolver 接口的 resolveLocale() 方法解析自定义语言。使用@Bean 注解将当前配置类注册成Spring容器中的一个Bean组件。这样就可以覆盖默认的LocaleResolver组件。在重写 resolveLocale() 方法中,可以根据不同的需求切换语言信息从而获取请求的参数,只有请求参数不为空时,才可以进行语言切换。

最后,只需要修改login.html页面的”中文”、”English”超链接提交路径即可

<a th:href="@{/login.html(l='zh_CN')}">中文</a>
<a th:href="@{/login.html(l='en_US')}">English</a>

3、SpringBoot全局异常处理

​ SpringBoot 默认的处理异常的机制,SpringBoot 默认的提供了一套处理异常的机制。一旦程序中出现了异常,SpringBoot 会向 /error 的 url 发送请求。在 SpringBoot 中提供了一个叫做 BasicExceptionController 来处理 /error 请求,然后跳转到默认显示异常的页面来显示异常信息。

​ 在SpringBoot框架中,局部处理异常的方式与 SpringMVC 方式一致。实现全局异常的常用的方法有自定义错误页面和@ControllerAdvice 注解

3.1、自定义错误页面处理异常

在SpringBoot框架中,在浏览器输入不存在的请求地址会出现如下图的错误:

在这里插入图片描述

上述的错误在SpringBoot开发中十分常见,虽然 SpringBoot 为我们提供了默认的错误页面映射,但是实际开发中,上图的错误页面对用户来说并不友好,所以我们需要自己来实现异常提示。

如果我们需要将所有的异常统一跳转到自定义的错误页面,需要在 src/main/resources/templates 目录下创建 error.html 页面,并且页面名称必须是 error。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www/thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="libs/three.min.js"></script>
    <title>错误页面</title>
</head>

<body>
    <h1>
        错误页面!
    </h1>
</body>

</html>

3.2、@ControllerAdvice+@ExceptionHandler

在 SpringBoot 框架中,可以使用 @ControllerAdvice 注解和@ExceptionHandler 注解实现全局异常统一处理。@ControllerAdvice 注解用于标识某个类是控制器的切面类;@ExceptionHandler 注解用于标识在异常处理的方法上。如果要实现 Ajax 异常处理,可以使用 @RestControllerAdvice 注解,该注解用于标识某个类是控制器的切面类,支持 restful 风格及ajax返回json。

  1. 定义GlobalException异常处理类

    在项目中创建名为 com.manong.exception 的包,并在该包下定义 GlobalException 异常处理类,代码如下:

@ControllerAdvice
public class GlobalException{ 
   
    
    @ExceptionHandler(value={ 
   Exception.class})
    public Object exceptionHandler(HttpServletRequest request,Exception e){ 
   
        ModelAndView modelandView = new ModelAndView();
        modelandView.addObject("exception",e.getMessage()); // 设置异常信息
        modelandView.addObject("url",request.getRequestURL()); //设置异常路径
        modelandView.setViewName("error"); //设置页面视图
        return modelAndView;
    }
}
  1. 修改 error.html 页面

    添加异常信息和异常路径显示:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www/thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="libs/three.min.js"></script>
    <title>错误页面</title>
</head>

<body>
    <h1>
        错误页面!
    </h1>
    <h1>
        错误信息:<font color='red' th:text="${exception}"></font>
    </h1>
    <h1>
        错误信息:<font color='red' th:text="${url}"></font>
    </h1>
</body>

</html>
  1. 测试

    编写控制器,测试web页面跳转的全局异常处理

@RestController
public class HelloController{ 
   
    @RequestMapping("/hello")
    public String hello(){ 
   
        int i =  10/0;
        return "测试异常处理";
    }
}

在浏览器输入 http://localhost:8080/hello 测试,就会出现下图的错误

在这里插入图片描述

3.3、兼容web与ajax

上方的注解只能处理普通请求,如果我们发起无刷新的 ajax 请求,则需要另外处理

  1. 定义GlobalException异常处理类
@ControllerAdvice
public class GlobalException{ 
   
    
    @ExceptionHandler(value={ 
   Exception.class})
    public Object exceptionHandler(HttpServletRequest request,Exception e){ 
   
        ModelAndView modelandView = new ModelAndView();
        modelandView.addObject("exception",e.getMessage()); // 设置异常信息
        modelandView.addObject("url",request.getRequestURL()); //设置异常路径
        modelandView.setViewName("error"); //设置页面视图
        return modelAndView;
    }
    
    /** * 判断是否是ajax异步提交 */
    public static boolean isAjax(HttpServletRequest httpRequest){ 
   
        return (httpRequest.getHeader("X-Requested-With") != null && "XMLHttpRequest".equals(httpRequest.getHeader("X-Requested-With").toString()));
    }
}
  1. 编写控制器
@RequestMapping("/ajaxexception")
public Object ajaxexception(){ 
   
    int i = 10/0;
    return true;
}
  1. 编写测试页面

    在 static 目录下创建 test.html页面,发送ajax请求到控制器

<script> $(function(){ 
      $.get $.get("/ajaxexception",function(data){ 
      if(!data.success){ 
      console.log("错误信息"+data.exception); console.log("错误路径"+data.url); } },"json"); }); </script>

注意:在响应 ajax 形式的异常处理中,本案例仅在控制台打印输出异常信息和异常路径等,在实际开发中,需要将这些异常处理数据显示到页面中展示。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171551.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月20日 下午10:46
下一篇 2022年8月20日 下午10:46


相关推荐

  • 解决:为什么VMware虚拟机配置连上网了,电脑重启后,联网需要重置?!看这里

    解决:为什么VMware虚拟机配置连上网了,电脑重启后,联网需要重置?!看这里

    2021年5月28日
    191
  • 常见计算机病毒种类及特征介绍与分析

    常见计算机病毒种类及特征介绍与分析什么是计算机病毒通俗来讲,计算机病毒是一个程序,一段可执行代码。它可以很快地通过网络、U盘等蔓延,又常常难以根除。它能影响计算机使用,并且具有破坏性,复制性和传染性。病毒又分为很多种类,下面,我就来说说最常见的一些病毒吧!系统病毒系统病毒的前缀为:Win32、PE、Win95、W32、W95等。这些病毒的一般共有的特性是可以感染windows操作系统的*.exe和*.dll

    2022年5月3日
    48
  • Python矩阵转置方法大全

    Python矩阵转置方法大全文章目录矩阵转置矩阵转置matric=[[2,2,8],[0,4,0]]transpose=[[matric[j][i]forjinrange(len(matric))]foriinrange(len(matric[0]))]print(transpose)[[2,0],&amp;amp;amp;amp;amp;nbsp;[2,4],&amp;amp;amp;amp;amp;nbsp;[8,0]]

    2022年6月2日
    77
  • Android开机动画总结

    Android开机动画总结开机动画制作开机动画两个要点启动开机动画开机动画运行过程代码位置运行简介开机动画遇到的问题制作开机动画两个要点压缩时选择“存储”模式资源文件命名序号,需要和最大序号位数相同,位数不够,前面补零。如00、01、02、。。。、10、11。系统开机动画支持功能配置debug.sf.nobootanimation为0若要关闭开机动画功能,在device目录下的mk文件中配置,确保系统开…

    2022年5月15日
    48
  • GB28181的协议详解

    GB28181的协议详解国标 GB28181 简介 本标准规定了公共安全视频监控联网系统 以下简称联网系统 的互联结构 传输 交换 控制的基本要求和安全性要求 以及控制 传输流程和协议接口等技术要求 本标准适用于公共安全视频监控联网系统的方案设计 系统检测 验收以及与之相关的设备研发 生产 背景 GB28181 协议全称为 GB T28181 安全防范视频监控联网系统信息传输 交换 控制技术要求 是由公安部科技信息化局提出 由全国安全防范报警系统标准化技术委员会 SAC TC100 归口 公安部

    2026年3月20日
    2
  • 由中序遍历和后序遍历还原二叉树_二叉树的中序列

    由中序遍历和后序遍历还原二叉树_二叉树的中序列二叉树的前序遍历、中序遍历和后序遍历之间还原二叉树1、概念(1)前序遍历   a、访问根节点;b、前序遍历左子树;c、前序遍历右子树。(2)中序遍历   a、中序遍历左子树;b、访问根节点;c、中序遍历右子树。(3)后序遍历   a、后序遍历左子树;b、后续遍历右子树;c、访问根节点。2、前序遍历和中序遍历还原二叉树思想如下:  a、根据前序遍历结果,第一个元素为二叉树的根结…

    2025年11月16日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号