SpringBoot学习笔记-S2

1. SpringBoot中的常见注解

  • @RequestBody:使SpringMVC框架可自动读取请求体里面的JSON格式的数据,转换成map类型的集合对象
  • @RestController:开发RESTful API 时使用,等价于@ResponseBody +
    @Controller。@RestController和@Controller的都可用来表示Spring某个类是否可以接收HTTP请求,@RestController可以直接返回数据,但无法返回指定页面;而@Controller需要@ResponseBody辅助,但可以返回指定页面。
  • @Validated:@Validation是一套帮助我们继续对传输的参数进行数据校验的注解,通过配置Validation可以很轻松的完成对数据的约束。通常包括下列参数校验:
@NotNull   //值不能为null
@NotEmpty  //值不能为null,并且内容不为空
@Email   //满足邮箱格式
@JsonFormat(shape=JsonFormat.Shape.STRING,pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")  //规定日期和时间格式

2. JWT(JSON Web Token)的使用

定义一种简洁的、自包含的格式,双方以json数据格式安全传输信息。采用Base64,一种基于64个可打印字符(A-Z a-z 0-9 + /)来表示二进制数据的编码方式。

  • Header(头部):记录令牌类型、签名算法
  • Payload(有效载荷):携带自定义信息、默认信息,不能存放密码等私密信息
  • Signature(签名):防止Token被篡改、确保安全性
    生成JWT Token的代码如下:
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;import java.util.Date;
import java.util.Map;public class JwtUtil {private static final String KEY = "uatr";// 生成tokenpublic static String genToken(Map<String, Object> claims){return JWT.create().withClaim("claims", claims).withExpiresAt(new Date(System.currentTimeMillis()+1000*60*60*12)).sign(Algorithm.HMAC256(KEY));}//解析并验证tokenpublic static Map<String, Object> parseToken(String token){return JWT.require(Algorithm.HMAC256(KEY)).build().verify(token).getClaim("claims").asMap();}
}

3. ThreadLocal的使用

3.1 功能

主要用于提供线程局部变量

  • 用来存取数据:可包含setter/getter、toString()、无参构造、有参构造等
  • 使用 ThreadLocal存储的数据,可以保证线程安全
  • 提供一个全局的ThreadLocal可以多次调用userID、userName等内容

3.2 意义

  • 可减少参数的传递(无需在多个地方重新声明参数)
  • 可以把拦截器中的数据共享到ControllerSercviceDao等进行使用

3.3 拦截器工具类

public class ThreadLocalUtil {// 提供ThreadLocal对象private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();//根据键获取值public static<T> T get() { return (T) THREAD_LOCAL.get();}// 存储键值对public static void set(Object value){ THREAD_LOCAL.set(value);}// 清除ThreadLocal,防止内存泄漏public static void remove(){THREAD_LOCAL.remove();}
}

4. MyBatis中#{ }和${ }的区别

#{ }${ }均是MyBatis的占位符。

  • #{ }:如果参数值是字符串类型,则会自动拼接上前后的单引号,且在赋值时进行转义操作,有效防止SQL注入
  • ${ }:简单拼接字符串,不会添加字符串前后的引号

5. 配置MyBatis时的常见问题及解决方案

5.1 Failed to configure a DataSource

在这里插入图片描述

  • 错误解释:配置数据源失败
  • 原因分析:配置pom.xmlbuild标签配置出错
  • 解决方案:检查pom.xml文件中的配置结构,可参照如下结构配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--让当前工程继承父工程--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version></parent><groupId>com.uatr.sys</groupId><artifactId>uatr_system</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>uatr_system</name><description>uatr_system</description><url>https://maven.apache.org</url><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><!--thymeleaf--><!--<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>--><!-- web组件   --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mysql驱动   --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!-- mybatis   --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency><!--lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--validation依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><!--java-JWT坐标--><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.4.0</version></dependency><!--  test      --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/resources</directory><includes><include>**/*.yml</include><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
</project>

5.2 Caused by: org.springframework.beans.factory.BeanCreationException

在这里插入图片描述

  • 错误解释:Bean对象创建失败,发生了BeanCreationException
  • 原因分析:mybatis的配置文件中,mapper映射配置出错,找不到Bean对象对应的映射。可能因为mapper中既没有写SQL相关注解,也没有在resources文件夹中编写mapper对应SQL操作的xml文件,或者配置路径有错误。
  • 解决方案:首先排除没有编写SQL操作的注解或者xml文件,如果确定xml文件存在,则检查配置pom.xml文件中的配置,如5.1节代码所示,将resources目录和.yml.properties.xml均添加到里面。
<resources><resource><directory>src/main/resources</directory><includes><include>**/*.yml</include><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources>

5.3 Consider defining a bean of type ‘xxx’ in your configuration

在这里插入图片描述

  • 错误解释:Cotroller中的Service需要一个类型相对应的Bean
  • 原因分析:mapper中的xml文件有问题,与mapper接口文件不匹配,导致service层和controller层找不到对应的可操作的Bean对象。
  • 解决方案:更改文件夹resources中mapper对应的xml文件,查找并改正文件中的语法错误。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FaceForensics++数据库下载(一步步解析过程)

FaceForensics数据库下载&#xff08;超详细版教程&#xff09; 相信很多做deepfake相关研究的朋友&#xff0c;在对模型进行测试或者对潜前人的研究进行复现时&#xff0c;都需要下载一系列数据库并进行预处理等操作&#xff0c;而FaceForensics数据库是一个由数千个使用不同…

数据库相关知识总结

一、数据库三级模式 三个抽象层次&#xff1a; 1. 视图层&#xff1a;最高层次的抽象&#xff0c;描述整个数据库的某个部分的数据 2. 逻辑层&#xff1a;描述数据库中存储的数据以及这些数据存在的关联 3. 物理层&#xff1a;最低层次的抽象&#xff0c;描述数据在存储器中时如…

962: 括号匹配问题

【学习版】 【C语言】 【C】 #include<iostream>class MyStack { public:struct Node {char val;Node* prev;Node* next;Node(char x) :val(x), prev(NULL),next(NULL) {};};MyStack() {base new Node(0);top base;}bool empty() {return top base;}void push(int …

Java快速入门系列-4(面向对象编程)

第四章&#xff1a;面向对象编程 4.1 类与对象4.1.1 类的概念4.1.2 对象的实例化与使用4.1.3 访问修饰符与封装 4.2 继承、封装与多态4.2.1 继承4.2.2 封装4.2.3 多态 4.3 抽象类与接口4.3.1 抽象类4.3.2 接口 4.4 包与访问控制 4.1 类与对象 4.1.1 类的概念 在Java中&#x…

【java探索之旅】逻辑控制掌握 顺序结构 分支语句

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、逻辑控制的概念二、顺序结构三、分支结构3.1 if语句3.2 if习题巩固3.3 细节注意项…

excel散点图怎么每个点添加名称

最终效果图&#xff1a; 添加图标元素->数据标签->其他数据标签选项 选择单元格中的值 手动拖动数据标签&#xff0c;调整到合适的位置。

基于Vue3 中后台管理系统框架

基于Vue3 中后台管理系统框架 文章目录 基于Vue3 中后台管理系统框架一、特点二、源码下载地址 一款开箱即用的 Vue 中后台管理系统框架&#xff0c;支持多款 UI 组件库&#xff0c;兼容PC、移动端。vue-admin, vue-element-admin, vue后台, 后台系统, 后台框架, 管理后台, 管理…

Vue3组件基础示例

组件是vue中最推崇的&#xff0c;也是最强大的功能之一&#xff0c;就是为了提高重用性&#xff0c;减少重复性的开发。 如何使用原生HTML方法实现组件化 在使用原生HTML开发时&#xff0c;我们也会遇到一些常见的功能、模块&#xff0c;那么如何在原生HTML中使用组件化呢&am…

线上研讨会 | 新一代数字化技术赋能机器人及智能产线行业高质量发展

随着智能制造的快速推进&#xff0c;制造业转型升级到了关键阶段。越来越多的企业以数字化技术搭配智能机器人及智慧产线&#xff0c;主动实现数字化转型。达索系统3D体验平台是实现企业数字化转型的新一代数智化平台&#xff0c;基于型、数字驱动、数字化连续技术&#xff0c;…

HarmonyOS实战开发-存储空间统计(仅对系统应用开放)

介绍 本示例通过应用程序包管理、应用空间统计与卷管理模块&#xff0c;实现了查看当前设备存储空间信息、所有安装的应用的存储信息、所有可用卷的存储信息的功能。 效果预览 使用说明&#xff1a; 1.主页面会展示当前设备存储使用的详细信息。 2.点击“应用”&#xff0c;…

HarmonyOS 应用开发-页面间共享组件实例的案例

介绍 本示例提供组件实例在页面间共享的解决方案&#xff1a;通过Stack容器&#xff0c;下层放地图组件&#xff0c;上层放Navigation组件来管理页面&#xff0c;页面可以共享下层的地图组件&#xff0c;页面中需要显示地图的区域设置为透明&#xff0c;并参考触摸交互控制&am…

ST表的解释

介绍 ST表&#xff1a;一种用于高效处理区间查询的数据结构。它可以在O(1)的时间复杂度内回答某一区间的最值查询&#xff08;最小值、最大值等&#xff09;。ST表使用动态规划的思想&#xff0c;通过预处理的方式来快速计算出各个区间的最值。 st算法的主要思想就是将所求的…