更换swagger2,增加mybatisplus生成代码
This commit is contained in:
61
pom.xml
61
pom.xml
@ -163,12 +163,6 @@
|
||||
<version>0.11.5</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Spring Security -->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.springframework.boot</groupId>-->
|
||||
<!-- <artifactId>spring-boot-starter-security</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
<!-- Redis -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
@ -181,17 +175,17 @@
|
||||
<version>2.11.1</version> <!-- 可根据需要选择版本 -->
|
||||
</dependency>
|
||||
|
||||
<!-- Springdoc OpenAPI UI -->
|
||||
<!-- swagger2 -->
|
||||
<dependency>
|
||||
<groupId>org.springdoc</groupId>
|
||||
<artifactId>springdoc-openapi-ui</artifactId>
|
||||
<version>1.6.14</version> <!-- 支持 Java 8 的最新版本 -->
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-swagger2</artifactId>
|
||||
<version>2.9.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.webjars</groupId>
|
||||
<artifactId>swagger-ui</artifactId>
|
||||
<version>4.15.5</version>
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-swagger-ui</artifactId>
|
||||
<version>2.9.2</version>
|
||||
</dependency>
|
||||
|
||||
<!-- JAXB API (Java 8 兼容) -->
|
||||
@ -206,6 +200,21 @@
|
||||
<artifactId>reactor-core</artifactId>
|
||||
<version>3.2.2.RELEASE</version> <!-- 支持 Java 8 -->
|
||||
</dependency>
|
||||
|
||||
<!-- MapStruct 核心库 -->
|
||||
<dependency>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct</artifactId>
|
||||
<version>1.5.5.Final</version>
|
||||
</dependency>
|
||||
|
||||
<!-- MapStruct 注解处理器(用于编译期生成实现类) -->
|
||||
<dependency>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct-processor</artifactId>
|
||||
<version>1.5.5.Final</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<!-- Build Configuration -->
|
||||
@ -249,32 +258,6 @@
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>3.6.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>unpack</id>
|
||||
<phase>process-resources</phase>
|
||||
<goals>
|
||||
<goal>unpack</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>org.webjars</groupId>
|
||||
<artifactId>swagger-ui</artifactId>
|
||||
<version>4.15.5</version>
|
||||
<type>jar</type>
|
||||
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
|
||||
<includes>META-INF/resources/**</includes>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
|
||||
@ -29,6 +29,6 @@ public class Application {
|
||||
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
|
||||
Environment environment = context.getBean(Environment.class);
|
||||
System.out.println("启动成功,后端服务API地址:http://" + ComputerInfo.getIpAddr() + ":"
|
||||
+ environment.getProperty("server.port") + "/doc.html");
|
||||
+ environment.getProperty("server.port") + "/swagger-ui.html");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,16 +0,0 @@
|
||||
package com.sczx.user.config;
|
||||
|
||||
|
||||
import org.springdoc.core.GroupedOpenApi;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
//@Configuration
|
||||
public class SpringDocConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi publicApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("sczx-service")
|
||||
.packagesToScan("com.sczx.app.controller")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
35
src/main/java/com/sczx/user/config/SwaggerConfig.java
Normal file
35
src/main/java/com/sczx/user/config/SwaggerConfig.java
Normal file
@ -0,0 +1,35 @@
|
||||
package com.sczx.user.config;
|
||||
|
||||
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import springfox.documentation.builders.ApiInfoBuilder;
|
||||
import springfox.documentation.builders.PathSelectors;
|
||||
import springfox.documentation.builders.RequestHandlerSelectors;
|
||||
import springfox.documentation.service.ApiInfo;
|
||||
import springfox.documentation.spi.DocumentationType;
|
||||
import springfox.documentation.spring.web.plugins.Docket;
|
||||
import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
||||
|
||||
@Configuration
|
||||
@EnableSwagger2
|
||||
public class SwaggerConfig {
|
||||
@Bean
|
||||
public Docket createRestApi() {
|
||||
return new Docket(DocumentationType.SWAGGER_2)
|
||||
.apiInfo(apiInfo())
|
||||
.select()
|
||||
.apis(RequestHandlerSelectors.basePackage("com.sczx.user.controller")) // 修改为你的 controller 包路径
|
||||
.paths(PathSelectors.any())
|
||||
.build();
|
||||
}
|
||||
|
||||
private ApiInfo apiInfo() {
|
||||
return new ApiInfoBuilder()
|
||||
.title("用户服务接口文档")
|
||||
.description("sczx_user用户服务接口文档文档")
|
||||
.version("1.0")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@ -1,44 +0,0 @@
|
||||
package com.sczx.user.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.http.converter.StringHttpMessageConverter;
|
||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@Configuration
|
||||
@EnableWebMvc
|
||||
public class WebConfig implements WebMvcConfigurer {
|
||||
|
||||
@Override
|
||||
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
||||
registry.addResourceHandler("/swagger-ui/**")
|
||||
.addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/4.15.5/");
|
||||
registry.addResourceHandler("/swagger-ui.html")
|
||||
.addResourceLocations("classpath:/META-INF/resources/swagger-ui.html");
|
||||
registry.addResourceHandler("/v3/api-docs/**")
|
||||
.addResourceLocations("classpath:/META-INF/resources/swagger-ui/");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
|
||||
|
||||
converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8));
|
||||
// 添加支持 application/json;charset=UTF-8 的 Jackson 转换器
|
||||
converters.add(new MappingJackson2HttpMessageConverter() {
|
||||
@Override
|
||||
public List<MediaType> getSupportedMediaTypes() {
|
||||
return Collections.singletonList(MediaType.APPLICATION_JSON_UTF8);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -3,8 +3,10 @@ package com.sczx.user.controller;
|
||||
import com.sczx.user.model.LoginRequest;
|
||||
import com.sczx.user.service.IUserService;
|
||||
import com.sczx.user.util.JwtUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.annotations.Api;
|
||||
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@ -12,7 +14,7 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@Tag(name = "登录控制器", description = "注册、登录")
|
||||
@Api(value = "登录控制器", produces = "注册、登录")
|
||||
@RequestMapping("/auth")
|
||||
@RestController
|
||||
public class AuthController {
|
||||
@ -22,13 +24,13 @@ public class AuthController {
|
||||
@Autowired
|
||||
private JwtUtil jwtUtil;
|
||||
|
||||
@Operation(summary = "注册", description = "用户注册")
|
||||
@ApiOperation(value = "注册", notes = "用户注册",produces = "application/json")
|
||||
@PostMapping("/register")
|
||||
public ResponseEntity<String> register(@RequestBody LoginRequest request) {
|
||||
return ResponseEntity.ok(userService.register(request));
|
||||
}
|
||||
|
||||
@Operation(summary = "登录", description = "用户登录返回token")
|
||||
@ApiOperation(value = "登录", notes = "用户登录返回token",produces = "application/json")
|
||||
@PostMapping("/login")
|
||||
public ResponseEntity<String> login(@RequestBody LoginRequest request) {
|
||||
String token = userService.login(request);
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
package com.sczx.user.controller;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@Tag(name = "示例接口", description = "用于演示 Springdoc 的接口")
|
||||
@Api(value = "示例接口", produces = "用于演示 Springdoc 的接口")
|
||||
public class DemoController {
|
||||
@GetMapping("/test")
|
||||
@Operation(summary = "测试接口", description = "返回一个测试字符串")
|
||||
@ApiOperation(value = "测试接口", notes = "返回一个测试字符串")
|
||||
public String test() {
|
||||
return "OK";
|
||||
}
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
package com.sczx.user.model;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
@ -9,15 +10,15 @@ import lombok.Data;
|
||||
* @Date: 2025/07/06/13:41
|
||||
* @Description:
|
||||
*/
|
||||
@Schema(description = "用户注册请求")
|
||||
@ApiModel(value = "用户注册请求")
|
||||
@Data
|
||||
public class LoginRequest {
|
||||
@Schema(description = "用户名")
|
||||
@ApiModelProperty(value = "用户名")
|
||||
private String username;
|
||||
@Schema(description = "密码")
|
||||
@ApiModelProperty(value = "密码")
|
||||
private String password;
|
||||
@Schema(description = "微信登录 code")
|
||||
@ApiModelProperty(value = "微信登录 code")
|
||||
private String wechatCode; // 微信登录 code
|
||||
@Schema(description = "支付宝 user_id")
|
||||
@ApiModelProperty(value = "支付宝 user_id")
|
||||
private String alipayUserId; // 支付宝 user_id
|
||||
}
|
||||
@ -1,6 +1,8 @@
|
||||
package com.sczx.user.model;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
@ -9,13 +11,13 @@ import lombok.Data;
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
@Schema(description = "登录返回")
|
||||
@ApiModel(value = "登录返回")
|
||||
@Data
|
||||
public class LoginResponse {
|
||||
@Schema(description = "登录的token")
|
||||
@ApiModelProperty(value = "登录的token")
|
||||
private String token;
|
||||
@Schema(description = "登录的refreshToken")
|
||||
@ApiModelProperty(value = "登录的refreshToken")
|
||||
private String refreshToken;
|
||||
@Schema(description = "登录用户的角色")
|
||||
@ApiModelProperty(value = "登录用户的角色")
|
||||
private String role;
|
||||
}
|
||||
@ -4,7 +4,10 @@ import io.jsonwebtoken.JwtException;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
import io.jsonwebtoken.security.Keys;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -16,9 +19,10 @@ import java.util.Date;
|
||||
* @Date: 2025/07/06/14:00
|
||||
* @Description:
|
||||
*/
|
||||
@Slf4j
|
||||
//@Slf4j
|
||||
@Component
|
||||
public class JwtUtil {
|
||||
private static final Logger log = LoggerFactory.getLogger(JwtUtil.class);
|
||||
|
||||
@Value("${auth.token-expiration}")
|
||||
private long expiration;
|
||||
|
||||
@ -23,11 +23,6 @@ spring:
|
||||
# version: 1.0.0
|
||||
# env: dev
|
||||
|
||||
jpa:
|
||||
hibernate:
|
||||
ddl-auto: update
|
||||
show-sql: true
|
||||
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
|
||||
|
||||
lifecycle:
|
||||
timeout-per-shutdown-phase: 30s # 设置优雅停机时间
|
||||
@ -58,15 +53,9 @@ hystrix:
|
||||
thread:
|
||||
timeoutInMilliseconds: 10000 # 默认熔断超时时间
|
||||
|
||||
springdoc:
|
||||
swagger-ui:
|
||||
url: /v3/api-docs
|
||||
path: /doc.html
|
||||
packages-to-scan: com.sczx.user.controller # 替换为你的 controller 包路径
|
||||
|
||||
mybatis-plus:
|
||||
mapper-locations: classpath*:mapper/**/*.xml
|
||||
type-aliases-package: com.sczx.user.entity # 实体类包路径
|
||||
type-aliases-package: com.sczx.user.po # 实体类包路径
|
||||
configuration:
|
||||
mapUnderscoreToCamelCase: true
|
||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台打印 SQL(调试用)
|
||||
|
||||
41
src/test/java/com/sczx/user/CodeGenerator.java
Normal file
41
src/test/java/com/sczx/user/CodeGenerator.java
Normal file
@ -0,0 +1,41 @@
|
||||
package com.sczx.user;
|
||||
|
||||
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
|
||||
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
|
||||
import com.baomidou.mybatisplus.generator.config.OutputFile;
|
||||
import com.baomidou.mybatisplus.generator.config.rules.DateType;
|
||||
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class CodeGenerator {
|
||||
|
||||
private static final String parentPackage = "com.sczx.store";
|
||||
private static final String jdbcUrl = "jdbc:mysql://115.190.8.52:3306/sczx?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&useSSL=false&serverTimezone=Asia/Shanghai";
|
||||
private static final String username = "sczx_user";
|
||||
private static final String password = "Sczx123@";
|
||||
private static final String author = "zhangli";
|
||||
public static void main(String[] args) {
|
||||
DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig.Builder(jdbcUrl, username, password);
|
||||
|
||||
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
|
||||
// 全局配置
|
||||
.globalConfig(builder -> builder.outputDir(System.getProperty("user.dir") + "/src/main/java")
|
||||
.author(author).disableOpenDir().enableSwagger()
|
||||
.dateType(DateType.TIME_PACK).commentDate("yyyy-MM-dd HH:mm:ss")
|
||||
.fileOverride())
|
||||
// 包配置
|
||||
.packageConfig(builder -> builder.parent(parentPackage).entity("po.base").service("repository.base").serviceImpl("repository.impl.base").xml("")
|
||||
.mapper("mapper.base").pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper/base")))
|
||||
|
||||
// 策略配置
|
||||
.strategyConfig((scanner, builder) -> builder.addInclude(scanner.apply("请输入表名:"))
|
||||
.addTablePrefix("zc_"/*,"zd_"*/)//可支持多个,按逗号分隔
|
||||
.entityBuilder().formatFileName("%sPO").enableLombok()
|
||||
.mapperBuilder().formatMapperFileName("%sMapper").formatXmlFileName("%sMapper")
|
||||
.controllerBuilder().formatFileName("%sController").enableRestStyle()
|
||||
.serviceBuilder().formatServiceFileName("%sRepo").formatServiceImplFileName("%sRepoImpl"))
|
||||
.templateEngine(new FreemarkerTemplateEngine())
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user