# java-study **Repository Path**: zeng-zhiyao/java-study ## Basic Information - **Project Name**: java-study - **Description**: 本项目是一个基于Spring Boot的RESTful API服务,使用了以下技术栈: Spring Boot:作为核心框架,提供快速开发和部署能力。 Swagger:用于生成API文档,方便测试和维护。 Lombok:减少样板代码,提高开发效率。 MySQL:作为关系型数据库,存储项目数据。 JWT:用于身份验证和授权。 统一响应:所有API响应遵循统一的格式,提高接口的可读性和一致性。 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-07-09 - **Last Updated**: 2025-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringBoot, 模板, 三层架构 ## README 当然可以!以下是一个Spring Boot项目的文档示例,涵盖了你提到的技术栈:Spring Boot、Swagger、Lombok、MySQL、JWT拦截器和统一响应。 ### 项目文档 #### 项目概述 本项目是一个基于Spring Boot的RESTful API服务,使用了以下技术栈: - **Spring Boot**:作为核心框架,提供快速开发和部署能力。 - **Swagger**:用于生成API文档,方便测试和维护。 - **Lombok**:减少样板代码,提高开发效率。 - **MySQL**:作为关系型数据库,存储项目数据。 - **JWT**:用于身份验证和授权。 - **统一响应**:所有API响应遵循统一的格式,提高接口的可读性和一致性。 #### 项目结构 ``` springboot-project ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ └── javademo │ │ │ ├── config │ │ │ │ ├── SwaggerConfig.java │ │ │ │ ├── JwtConfig.java │ │ │ │ └── ResponseConfig.java │ │ │ ├── controller │ │ │ │ └── UserController.java │ │ │ ├── entity │ │ │ │ └── User.java │ │ │ ├── exception │ │ │ │ └── CustomException.java │ │ │ ├── repository │ │ │ │ └── UserRepository.java │ │ │ ├── service │ │ │ │ ├── UserService.java │ │ │ │ └── UserServiceImpl.java │ │ │ └── DemoApplication.java │ │ └── resources │ │ ├── application.properties │ │ ├── static │ │ └── templates │ └── test │ └── java │ └── com │ └── example │ └── demo │ └── DemoApplicationTests.java └── pom.xml ``` #### 技术栈 - **Spring Boot**:2.5.0 - **Swagger**:3.0.0 - **Lombok**:1.18.20 - **MySQL**:8.0.23 - **JWT**:0.11.5 - **统一响应**:自定义 #### 依赖管理 在 `pom.xml` 文件中,添加以下依赖: ```xml org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test com.auth0 java-jwt 3.8.2 org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java 8.0.33 org.mybatis.spring.boot mybatis-spring-boot-starter 3.0.3 io.jsonwebtoken jjwt 0.12.6 ch.qos.logback logback-core org.projectlombok lombok provided org.springdoc springdoc-openapi-starter-webmvc-ui 2.3.0 ``` #### 配置文件 在 `application.properties` 文件中,添加以下配置: ```properties spring.application.name=java-demo spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=root mybatis.mapper-locations=classpath:com/example/javademo/*.xml logging.level.org.apache.ibatis=DEBUG #mybatis.mapper-locations=classpathcom/example/javademo/Mapper/*.xml logging.console.enabled=true spring.web.resources.static-locations=file:./src/main/static/ # ?? MyBatis ?????? mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl logging.level.com.example=DEBUG logging.file.name=app.log #logging.config=classpath:logback-spring.xml springdoc.api-docs.enabled=true springdoc.api-docs.path=/user-service/v3/api-docs springdoc.swagger-ui.enabled=true springdoc.swagger-ui.path=/user-service/swagger-ui/index.html ``` #### Swagger配置 在 `config/SwaggerConfig.java` 文件中,配置Swagger: ```java ``` #### JWT配置 在 `config/JwtConfig.java` 文件中,配置JWT: ```java package com.example.javademo.Utils; import io.jsonwebtoken.*; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwt; import io.jsonwebtoken.security.Keys; import javax.crypto.SecretKey; import java.util.Date; import java.util.HashMap; import java.util.Map; public class JwtUtils { private static final String SECRET = "&/2yf5!6@$$&/2yf5!6@$$&/2yf5!6@$$"; // 给token加密的秘钥 public static String createToken( Map claims) { // 1. 将 SECRET 转换成 Key 对象(更安全) SecretKey key = Keys.hmacShaKeyFor(SECRET.getBytes()); // 3. 构建 JWT return Jwts.builder() .claims(claims) // 一次性设置所有 Claims .issuedAt(new Date()) // 签发时间(iat) .expiration(new Date(System.currentTimeMillis() + 24 * 60 * 60 * 1000)) // 过期时间(exp) .signWith(key) // 签名(自动选择算法,如 HS256) .compact(); } public static Map parseToken(String token) { try { // 1. 将 SECRET 转换成 Key 对象 SecretKey key = Keys.hmacShaKeyFor(SECRET.getBytes()); // 2. 解析 JWT Jws jws = Jwts.parser() .verifyWith(key) // 设置签名密钥 .build() // 构建解析器 .parseSignedClaims(token); // 解析并验证签名 // 3. 获取 Payload(即原来的 Body) return jws.getPayload(); } catch (JwtException e) { System.out.println(e.getMessage()+"msg"); throw new RuntimeException("Invalid JWT token", e); } } } ``` #### 统一响应配置 在 `config/ResponseConfig.java` 文件中,配置统一响应: ```java package com.example.javademo.Utils; /** * @作者 江南一点雨 * @公众号 江南一点雨 * @微信号 a_java_boy * @GitHub https://github.com/lenve * @博客 http://wangsong.blog.csdn.net * @网站 http://www.javaboy.org * @时间 2019-09-20 8:39 */ public class Response { private Integer status; private String msg; private Object data; public static Response build() { return new Response(); } public static Response ok(String msg) { return new Response(200, msg, null); } public static Response ok(String msg, Object data) { return new Response(200, msg, data); } public static Response error(String msg) { return new Response(500, msg, null); } public static Response error(String msg, Object data) { return new Response(500, msg, data); } private Response() { } private Response(Integer status, String msg, Object data) { this.status = status; this.msg = msg; this.data = data; } public Integer getStatus() { return status; } public Response setStatus(Integer status) { this.status = status; return this; } public String getMsg() { return msg; } public Response setMsg(String msg) { this.msg = msg; return this; } public Object getData() { return data; } public Response setData(Object data) { this.data = data; return this; } } ``` #### 用户实体 在 `entity/User.java` 文件中,定义用户实体: ```java package com.example.javademo.Entity; public class User { private String username; private String password; // Getter and Setter methods public String getUsername() { return username; } public String getPassword() { return password; } } ``` #### 用户仓库 在 `repository/UserRepository.java` 文件中,定义用户仓库: ```java ``` #### 用户服务 在 `service/UserService.java` 文件中,定义用户服务接口: ```java ``` 在 `service/UserServiceImpl.java` 文件中,实现用户服务: ```java ``` #### 用户控制器 在 `controller/UserController.java` 文件中,定义用户控制器: ```java ```