# 第三方库作用及其应用
# commons-io
- 是一组有关 IO 操作的开源工具包,包括文件拷贝、文件删除、文件比较、文件读取、文件写入等等。
- 有很多工具类:
- StringUtils: 字符串工具类
- NumberUtils: 数字工具类
- ArrayUtils: 数组工具类
- RandomUtils: 随机数工具类
- DateUtils: 日期工具类
- StopWatch: 计时器工具类
- ClassUtils: 反射工具类
- SystemUtils: 系统工具类
- MapUtils: 集合工具类
- BeanUtils: Bean 工具类
- IOUtils: IO 工具类
- FileUtils: 文件工具类
# hutool
- Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让 Java 语言也可以“甜甜的”。
- 类似 commons-io,提供了很多组件和工具类,实现特定功能。
# jakarta.validation:jakarta.validation.api
同下
# org.hibernate.validator:hibernate-validator
javax.validation.constraints
包下,定义了一系列的约束( constraint )注解。共 22 个,如下:
# 空和非空检查
- @NotBlank :只能用于字符串不为 null ,并且字符串 #trim() 以后 length 要大于 0 。
- @NotEmpty :集合对象的元素不为 0 ,即集合不为空,也可以用于字符串不为 null 。
- @NotNull :不能为 null 。
- @Null :必须为 null 。
# 数值检查
- @DecimalMax(value) :被注释的元素必须是一个数字,其值必须小于等于指定的最大值。
- @DecimalMin(value) :被注释的元素必须是一个数字,其值必须大于等于指定的最小值。
- @Digits(integer, fraction) :被注释的元素必须是一个数字,其值必须在可接受的范围内。
- @Positive :判断正数。
- @PositiveOrZero :判断正数或 0 。
- @Max(value) :该字段的值只能小于或等于该值。
- @Min(value) :该字段的值只能大于或等于该值。
- @Negative :判断负数。
- @NegativeOrZero :判断负数或 0 。
# Boolean 值检查
- @AssertFalse :被注释的元素必须为 true 。
- @AssertTrue :被注释的元素必须为 false 。
# 长度检查
- @Size(max, min) :检查该字段的 size 是否在 min 和 max 之间,可以是字符串、数组、集合、Map 等。
# 日期检查
— @Future :被注释的元素必须是一个将来的日期。 — @FutureOrPresent :判断日期是否是将来或现在日期。 — @Past :检查该字段的日期是在过去。 — @PastOrPresent :判断日期是否是过去或现在日期。
# 其它检查
- @Email :被注释的元素必须是电子邮箱地址。
- @Pattern(value) :被注释的元素必须符合指定的正则表达式。
# Hibernate Validator 附加的约束注解
org.hibernate.validator.constraints
包下,定义了一系列的约束( constraint )注解。如下:
- @Range(min=, max=) :被注释的元素必须在合适的范围内。
- @Length(min=, max=) :被注释的字符串的大小必须在指定的范围内。
- @URL(protocol=,host=,port=,regexp=,flags=) :被注释的字符串必须是一个有效的 URL 。
- @SafeHtml :判断提交的 HTML 是否安全。例如说,不能包含 javascript 脚本等等。
# @Valid 和 @Validated
@Valid 注解,是 Bean Validation 所定义(
javax.validation
包下),可以添加在普通方法、构造方法、方法参数、方法返回、成员变量上,表示它们需要进行约束校验。@Validated 注解,是 Spring Validation 所定义(
org.springframework.validation.annotation
包下),可以添加在类、方法参数、普通方法上,表示它们需要进行约束校验。同时,@Validated 有 value 属性,支持分组校验。
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Validated {
/**
* Specify one or more validation groups to apply to the validation step
* kicked off by this annotation.
* <p>JSR-303 defines validation groups as custom annotations which an application declares
* for the sole purpose of using them as type-safe group arguments, as implemented in
* {@link org.springframework.validation.beanvalidation.SpringValidatorAdapter}.
* <p>Other {@link org.springframework.validation.SmartValidator} implementations may
* support class arguments in other ways as well.
*/
Class<?>[] value() default {};
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- 两者大致有以下的区别:
名称 | Spring Validation 是否实现了声明式校验 | 是否支持嵌套校验 | 是否支持分组校验 |
---|---|---|---|
@Validated | 是 | 否 | 是 |
@Valid | 否 | 是 | 否 |
总的来说,绝大多数场景下,我们使用 @Validated 注解即可。而在有嵌套校验的场景,我们使用 @Valid 注解添加到成员属性上。
# com.github.xiaoymin:knife4j-spring-boot-starter
Knife4j。是一个基于 Spring Boot 的 Swagger 增强工具,可以帮助我们更好的管理和维护我们的接口文档。它提供了一些增强功能,比如:接口文档的美化、接口文档的分组、接口文档的权限控制等等。
swagger 相关,调试接口。启动程序,然后再浏览器里我们就可以进行输入: swagger 访问地址:http://localhost:8080/doc.html#/home
打开 swagger 文档 就可以进行测试了。
# org.projectlombok:lombok
注解开发
# spring-boot-starter-web
spring web
# JWT鉴权身份认证
Spring Security 整合 JWT。它是一种基于 JSON 的轻量级令牌,由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。JWT 被广泛用于实现身份验证和授权,特别适用于前后端分离的应用程序。由 header.payload.signature
三部分组成,你可以在此网站: https://jwt.io/
上获得解析结果。
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>${jjwt.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>${jjwt.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>${jjwt.version}</version>
</dependency>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 日志
Log4j基本被淘汰了,一般使用slf4j+logback的形式。SLF4J 是一个日志门面(facade),使得应用程序可以在运行时更换日志实现。Logback 是日志框架 SLF4J 的一个实现,它被设计用来替代 log4j。Logback 提供了更高的性能,更丰富的日志功能和更好的配置选项。
Spring Boot 默认使用 Logback,所以当你在 pom.xml 中加入 spring-boot-starter-web
依赖时,它会自动包含 Logback 相关依赖,无需额外添加。
<!-- logback.xml示例 -->
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<jmxConfigurator/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 应用名称 -->
<property scope="context" name="appName" value="weblog"/>
<!-- 自定义日志输出路径,以及日志名称前缀 -->
<property name="LOG_FILE" value="logs/${appName}.%d{yyyy-MM-dd}"/>
<!-- 使用 %X 来引用MDC中的值 [TraceId: %X{traceId}] -->
<property name="FILE_LOG_PATTERN"
value="[TraceId: %X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
<!--<property name="CONSOLE_LOG_PATTERN" value="${FILE_LOG_PATTERN}"/>-->
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_FILE}-%i.log</FileNamePattern>
<!-- 日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
<!-- 日志文件最大的大小 -->
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度 %errorMessage:日志消息,%n 是换行符-->
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- dev 环境(仅输出到控制台) -->
<springProfile name="dev">
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<!-- prod 环境(仅输出到文件中) -->
<springProfile name="prod">
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</springProfile>
</configuration>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#
#
# com.baomidou:mybatis-plus-boot-starter
# p6spy:p6spy
组件打印完整的 SQL 语句、执行耗时。
# xml 文件解析
- dom4j
- jaxb-api
- jaxb-impl
- jaxb-core
- jaxb-runtime
- jaxb-xjc
- jaxb-jxc
# IT-test
- junit
- cargo-mavenX-plugin
# 数据库连接池工具
- druid-spring-boot-starter
# JSON Web Token
- io.jsonwebtoken.jjwt
# 配置文件解析
- org.springframework.boot:spring-boot-configuration-processor
# 常见实现热部署的方式
- JRebel:旨在通过即时应用代码更改来加快开发周期,提高开发效率,通过动态地重载 Java 类,可以大幅减少开发人员在开发应用程序时的等待时间。
- Spring Loaded
- spring-boot-devtools
# com.google.guava:guava
集合类增强,缓存,函数式编程支持,字符串处理,并发工具
# org.apache.commons:commons-lang3
为 Java 提供各种实用程序类,如 StringUtils, ArrayUtils, NumberUtils 等,简化了常见的操作。时间和日期工具类DateUtils。异常处理辅助:提供类如 ExceptionUtils,帮助更轻松地处理和记录异常。随机数生成:RandomStringUtils。
#
#
#
#
#
# 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.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ratel</groupId>
<artifactId>java-validation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>java-validation</name>
<description>java validation action</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- spring-boot-starter-web 已经引入了 spring-boot-starter-validation,而 spring-boot-starter-validation 中也引入了 hibernate-validator 依赖,所以无需重复引入。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--在一些高版本springboot中默认并不会引入这个依赖,需要手动引入-->
<!-- <dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<scope>compile</scope>
</dependency> -->
<!-- 保证 Spring AOP 相关的依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<!--lombok相关 方便开发-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!--knife4j接口文档 方便待会进行接口测试-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73