一、springboot整合swagger2
1.1 引入依赖
<!-- swagger2 接口文档 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- swagger2的页面 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
<!--书写配置文件提示的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
1.2 创建一个配置属性类
使用了lombok。在使用时,安装lombok插件并导入lombok包
package com.zxm.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "swagger2")
public class SwaggerProperties {
/**
* 要对那个包的Controller 做文档的生成
*/
private String basePackage;
/**
* 作者的名称
*/
private String name ;
/**
* 主页
*/
private String url;
/**
* 邮箱
*/
private String email ;
/**
* 标题
*/
private String title ;
/**
* 描述
*/
private String description ;
/**
* 服务的团队
*/
private String termsOfServiceUrl;
/**
* 授权信息
*/
private String license ;
/**
* 授权的url
*/
private String licenseUrl ;
/**
* swagger2的版本
*/
private String version;
}
1.3 创建自动配置类
package com.zxm.config;
import io.swagger.models.Swagger;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2 // 开启swagger的功能
@EnableConfigurationProperties(SwaggerProperties.class)
public class SwaggerAutoConfiguration {
private SwaggerProperties swaggerProperties;
public SwaggerAutoConfiguration(SwaggerProperties swaggerProperties){
this.swaggerProperties = swaggerProperties;
}
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(getApiInfo())
.select().apis(RequestHandlerSelectors.basePackage(this.swaggerProperties.getBasePackage())).build();
}
private ApiInfo getApiInfo() {
Contact contact = new Contact(this.swaggerProperties.getName(), this.swaggerProperties.getUrl(), this.swaggerProperties.getEmail());
return new ApiInfoBuilder().
contact(contact).
title(this.swaggerProperties.getTitle()).
description(this.swaggerProperties.getDescription()).
termsOfServiceUrl(this.swaggerProperties.getTermsOfServiceUrl()).
license(this.swaggerProperties.getLicense()).
licenseUrl(this.swaggerProperties.getLicenseUrl()).
version(this.swaggerProperties.getVersion()).
build();
}
}
1.4 在shiro里放行swagger2
若未使用权限拦截可以不进行设置
若使用权限拦截则进行放行swagger2的请求
1.5 配置个人信息
1.5 访问页面
http://localhost:8085/doc.html
1.6 swagger注解
可以参考博客:
https://blog.csdn.net/xiaojin21cen/article/details/78654652
二、mybatis-plus的分页配置
@Configuration
public class MybatisConfig {
/**
* 分页的拦截器
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor(){
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setDialectType("mysql") ;
return paginationInterceptor ;
}
}
三、Restful的接口设计
3.1 分页查询
请求参数最少两个:current page
SysUser —> sys/user/page
例:http://localhost:8001/proxyApi/sys/user/page?t=1582615122917¤t=1&size=10
要素 | 表现形式 |
---|---|
请求方法 | get |
请求参数 | Integer current:当前页 Integer page:每页显示的条数 |
返回值 | IPage |
请求url | ${base_url}/表名称/page |
表名称路径定义在类上面@RequestMapping("/sys/user")
@GetMapping("/page")
public ResponseEntity<IPage<SysUser>> queryByPage(
@RequestParam(defaultValue = "1") Integer current,
@RequestParam(defaultValue = "10") Integer size,
String username
){}
3.2 回显单个数据
要素 | 表现形式 |
---|---|
请求方法 | get |
请求参数 | Long id(参数为url中的id ) |
返回值 | SysUser |
请求url | ${base_url}/表名称/info/{id} |
@GetMapping("/info/{id}")
public ResponseEntity<SysUser> getUser(@PathVariable("id") Long id) {
}
3.3删除一个数据
要素 | 表现形式 |
---|---|
请求方法 | delete |
请求参数 | Long id(参数为url中的id ) |
返回值 | Void |
请求url | ${base_url}/表的名称/{id} |
@DeleteMapping("/{id}")
public ResponseEntity<Void> delete(@PathVariable("id") Long id) {
}
3.4 删除一个集合(批量删除)
要素 | 表现形式 |
---|---|
请求方法 | delete |
请求参数 | List ids |
返回值 | Void |
请求url | ${base_url}/表名称 |
@DeleteMapping
public ResponseEntity<Void> delete(@RequestBody List<Long> ids) {
}
3.5 新增一个数据
要素 | 表现形式 |
---|---|
请求方法 | post |
请求参数 | SysUser sysUser |
返回值 | Void |
请求url | ${base_url}/表名称 |
@PostMapping
public ResponseEntity<Void> addUser(@RequestBody @Valid SysUser sysUser) {
}
3.6 修改一个数据
要素 | 表现形式 |
---|---|
请求方法 | put |
请求参数 | SysUser sysUser |
返回值 | Void |
请求url | ${base_url}/表名称 |
@PutMapping
public ResponseEntity<Void> modifyUser(@RequestBody @Valid SysUser sysUser) {
}
3.7 全查询数据
要素 | 表现形式 |
---|---|
请求方法 | get |
请求参数 | 无 |
返回值 | List |
请求url | ${base_url}/表的名称/list |
@GetMapping("/list")
public ResponseEntity<List<User>> list(){
}
四、使用restful风格的例子
package com.sxt.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sxt.entity.SysUser;
import com.sxt.service.SysUserService;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/sys/user")
public class UserController {
@Autowired
private SysUserService sysUserService ;
/**
* 分页查询
*/
@GetMapping("/page")
@ApiOperation("分页的查询")
public ResponseEntity<IPage<SysUser>> findByPage(
@RequestParam(defaultValue = "1") Integer current,
@RequestParam(defaultValue = "10") Integer size
){
IPage<SysUser> page = sysUserService.page(new Page<>(current, size));
return ResponseEntity.ok(page) ;
}
/**
* 删除单个值
* @param id
* @return
*/
@DeleteMapping("/{id}")
@ApiOperation("删除单个值")
public ResponseEntity<Void> delete(@PathVariable("id")Long id){
sysUserService.removeById(id);
return ResponseEntity.ok().build() ;
}
/**
* 删除多个值
*/
@DeleteMapping
@ApiOperation("删除多个值")
public ResponseEntity<Void> delete(@RequestBody List<Long> ids){
sysUserService.removeByIds(ids);
return ResponseEntity.ok().build() ;
}
/**
* 回显一个值
*/
@GetMapping("/info/{id}")
@ApiOperation("回显一个值")
public ResponseEntity<SysUser> findById(@PathVariable("id") Long id){
SysUser sysUser = sysUserService.getById(id);
return ResponseEntity.ok(sysUser) ;
}
/**
* 新增一个值
* @param sysUser
* @return
*/
@PostMapping
@ApiOperation("新增一个值")
public ResponseEntity<Void> add(@RequestBody SysUser sysUser){
sysUserService.save(sysUser);
return ResponseEntity.ok().build() ;
}
/**
* 修改一个值
* @param sysUser
* @return
*/
@PutMapping
@ApiOperation("修改一个值")
public ResponseEntity<Void> update(@RequestBody SysUser sysUser){
sysUserService.updateById(sysUser);
return ResponseEntity.ok().build() ;
}
}