springboot学习四:RESTful风格+swagger

RESTful风格下,代码需遵守安全性(例如get操作获取资源时,不应该引起资源本身的改变或者服务器状态的改变。什么样的方法做什么样的事)和幂等性(服务器中资源的第一次请求和第n次请求返回的效果是相同的)

RESTful风格下,一些常用的http方法使用如下:

状态码补充:

springboot实现RESTful API过程中,spring-boot-starter-web组件提供了REST操纵方法的对应注解(GET,POST,DELETE,PUT):

传统的设计方法中,对于增删改查数据往往在导航栏中有动词的参入。RESTful风格中。则要求url不要带有动词的出现。

例如:

传统删除用户:get方法 http://localhost/del?id=10

RESTful删除用户:delete http;//localhost/user/10

RESTful API实现的用户管理模块API示例:

(put之所以不用id是输入在请求体中而非导航栏)

复制代码
@RestController
public class usercontroller {
    @GetMapping("/user/{id}")
    public String getuserbyid(@PathVariable int id){
        System.out.println(id);
        return "根据ID获取用户";
    }
    @PostMapping("/user")
    public String insertuser(User user){
        return "添加用户";
    }
    @PutMapping("/user")
    public String updateuser(User user){
        return "更新用户";
    }
    @DeleteMapping("/user/{id}")
    public String deleteuserbyid(@PathVariable int id){
        System.out.println(id);
        return "根据id删除用户";
    }
}

@GetMapping注解中id作为动态值,需要加上{ }符号,{}的值应与下面方法名中的变量名相同。同时id作为动态变量,应在前面加上注解@PathVariable。否则只能用"?"来连接变量。

更新以及添加用户,id等信息一般写在请求体中,方法变量中则使用实体类变量。

**Swagger UI:**简单说:它是后端接口的 "可视化调试面板 + 自动更新的说明书",开发者 / 测试人员可通过网页直观查看、测试所有接口。后端开发者通过此网页直观方便的展示给前端开发者接口或传输方式等信息。

配置如下:

1,pom.xml中添加如下两个依赖

复制代码
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

2,编写配置类

复制代码
@Configuration //告诉spring容器此类为配置类
@EnableSwagger2 //启用swagger2的功能
public class Swaggerconfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com"))// 让swagger作用于com开头的根目录,也可另做修改
                .paths(PathSelectors.any()).build();
    }

    /**
     * 此处主要是API文档页面显示信息
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("演示项目API") // 标题
                .description("演示项目") // 描述
                .version("1.0") // 版本
                .build();
    }
}

3,在application.properties中添加以下代码,让2.6+至2.9.x间的高版本springboot可以适配使用。

复制代码
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

(注意检查application.properties中是否有' #spring.mvc.static-path-pattern=/images/** '此行修改静态文件路径的代码,这会一同修改swagger的访问路径,若有则会冲突)

4,配置好后通过访问localhost:8080/swagger-ui.html来访问网页

显示的是自己程序中的controller类

5,可以在controller类中添加注解来注释对应的方法

相关推荐
~城南花已开~15 小时前
Intel E810 SR-IOV VF Spoofcheck 防伪造测试-KVM3
服务器·网络·笔记·学习·ubuntu·etl工程师
我命由我1234517 小时前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee
FYKJ_201017 小时前
springboot高考志愿填报推荐系统14332-计算机课程设计、毕业设计
javascript·spring boot·python·架构·django·课程设计·高考
外收内放17 小时前
FastAPI猜字谜实战(8):收官
开发语言·python·学习·fastapi
m0_6399069417 小时前
RESTful API 接口设计规范:资源导向、HTTP 语义、统一返回格式、避坑指南
http·restful·设计规范
David猪大卫18 小时前
【C++修炼】STL容器—stack与queue
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
fengci.18 小时前
CTF2刷题记录(困难部分)
android·开发语言·前端·学习·php
vipxieliang18 小时前
ValidX vs 正则表达式:可读性与维护性对比
java·spring boot
qeen8718 小时前
【Linux】磁盘读写文件原理及文件系统基本概念介绍
linux·运维·服务器·笔记·学习
无心水18 小时前
6、软件工程 核心考点与学习笔记
笔记·学习·软件工程·软考高级·架构师·软考·软考系统架构设计师