引入依赖pom.xml
<!-- springdoc swagger3依赖 -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.7.0</version>
</dependency>
<!-- springdoc swagger3界面美化 http://ip:port/doc.html -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-springdoc-ui</artifactId>
<version>3.0.3</version>
</dependency>
编写配置类
package com.ljc.base.common.base.config;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SwaggerConfig {
/**
* http://127.0.0.1:5502/swagger-ui/index.html
*
* @return
*/
@Bean
public OpenAPI springOpenAPI() {
return new OpenAPI().info(
new Info().title("baseAdmin api doc")
.description("api文档")
.version("0.0.1"));
}
@Bean
public GroupedOpenApi publicApi() {
return GroupedOpenApi.builder()
.group("api")
.pathsToMatch("/**")
.build();
}
}
访问
项目启动后,访问地址
http://ip:port/doc.html
文档注解(与swagger2对比)
swagger 2 | spring doc | 描述 |
---|---|---|
@Api | @Tag | Controller类描述 |
@ApiOperation | @Operation | Controller接口的说明 |
@ApiModel | @Schema | 实体类说明 |
@ApiModelProperty | @Schema | 实体类中属性说明 |
@ApiImplicitParams | @Parameters | 接口参数集合 |
@ApiImplicitParam | @Parameter | 接口参数 |
@ApiParam | @Parameter | 接口参数 |
样例
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
@Tag(name = "系统控制器")
@RestController
@RequestMapping("api/auth/sys")
@Validated
public class SysController {
@Autowired
private SysService sysService;
@Operation(summary = "获取验证码")
@GetMapping("/captcha")
public void captcha(HttpServletResponse response) {
sysService.captcha(response);
}
@Operation(summary = "登录")
@Parameters({
@Parameter(name = "username", description = "用户名", in = ParameterIn.QUERY, required = true),
@Parameter(name = "password", description = "密码(加密)", in = ParameterIn.QUERY, required = true),
@Parameter(name = "code", description = "验证码", in = ParameterIn.QUERY, required = true)
})
@PostMapping("/login")
public BaseResult<String> login(@RequestParam @NotBlank(message = "用户名不能为空") String username,
@RequestParam @NotBlank(message = "密码不能为空") String password,
@RequestParam @NotBlank(message = "验证码不能为空") String code,
HttpServletRequest request) {
return sysService.login(username, password, code, request);
}
}
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* @author 林俊成
* @version 1.0
* @date 2023/1/7 15:44
*/
@Schema(description = "用户")
@Data
public class SysUser {
@Schema(description = "用户id")
@NotNull(message = "用户id不能为空", groups = {Update.class})
private Long id;
@NotBlank(message = "用户名不能为空")
@Length(max = 64, message = "用户名最大长度为64")
@Schema(description = "用户名(登录名)")
private String userName;
@NotBlank(message = "用户密码不能为空", groups = {Add.class})
@Schema(description = "用户密码")
private String password;
@Schema(description = "用户昵称")
private String nickname;
@Schema(description = "加密盐值")
private String salt;
@Schema(description = "联系电话")
private String phone;
@Schema(description = "用户性别(男:1,女:2,未知:3),默认男")
private SexType sex = SexType.BOY;
@Schema(description = "头像路径")
private String avatarPath;
@Schema(description = "用户邮箱")
private String email;
@Schema(description = "状态 (正常:1,锁定:0)默认正常")
private LockStatus status = LockStatus.UN_LOCK;
@Schema(description = "最近登录ip")
private String lastLoginIp;
@Schema(description = "最近登录时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastLoginTime;
@Schema(description = "密码错误次数")
private Integer errorNumber;
@Schema(description = "创建人")
private String createUser;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@Schema(description = "最后更新人")
private String lastUpdateUser;
@Schema(description = "最后更新时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastUpdateTime;
}