swagger的配置和restful风格开发

一、springboot整合swagger2

1.1 引入依赖

 <!-- swagger2 接口文档 -->
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger2</artifactId>
</dependency>
 <!-- swagger2的页面 -->
 <dependency>
 	<groupId>com.github.xiaoymin</groupId>
 	<artifactId>swagger-bootstrap-ui</artifactId>
 </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

若未使用shiro可以不进行设置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6lSPG6oa-1585211962853)(assets/1583077495400.png)]

1.5 配置个人信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qiy4XrMb-1585211962855)(assets/1583077322375.png)]

1.5 访问页面

http://localhost:8085/doc.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1xAjdlJA-1585211962856)(assets/1583077557021.png)]

二、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&current=1&size=10

要素 表现形式
请求方法 get
请求参数 Integer current:当前页 Integer page:每页显示的条数
返回值 IPage
请求url ${base_url}/表名称/page

3.2 回显单个数据

要素 表现形式
请求方法 get
请求参数 Long id 参数为url中的id
返回值 SysUser
请求url ${base_url}/表名称/info/{id}

Eg:回显一个管理

/sys/user/info/1

3.3删除一个数据

要素 表现形式
请求方法 delete
请求参数 Long id 参数为url中的id
返回值 Void
请求url ${base_url}/表的名称/{id}

3.4 删除一个集合(批量删除)

要素 表现形式
请求方法 delete
请求参数 List ids
返回值 Void
请求url ${base_url}/表名称

请求参数:Json的数据:[id1,id2…]

3.5 新增一个数据

要素 表现形式
请求方法 post
请求参数 SysUser sysUser
返回值 Void
请求url ${base_url}/表名称

请求参数:该新增对象的一个json 数据

3.6 全查询数据

要素 表现形式
请求方法 get
请求参数
返回值 List
请求url ${base_url}/表的名称/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() ;
    }

}
发布了29 篇原创文章 · 获赞 0 · 访问量 2245

猜你喜欢

转载自blog.csdn.net/rootDream/article/details/105122181