在前面的文章中我们已经了解到如何快速构建一个基于 Spring Boot 架构的 Web 服务: 今天这篇文章我们将继续深入学习接口开发与接口管理的内容。 我们先从简单的 GET 请求的实现开始: GET接口开发 返回 Cookies 的 GET 请求实现 我们这里以登录成功后,新添加一个 Cookie ,并返回对应的值示例。 示例代码: @RequestMapping(value = "/getCookies",method = RequestMethod.GET) @ApiOperation(value = "通过这个方法可以获取到Cookies",httpMethod = "GET") public String getCookies(HttpServletResponse response){ Cookie cookie = new Cookie("login","true"); response.addCookie(cookie); return "恭喜你获得cookies信息成功"; } Cookies 验证接口实现 在客户端通过上述接口获取并保存对应的 Cookie 值后,在后续接口中,需要携带 Cookie 信息;服务端获取到对应值并进行验证。 示例代码: @RequestMapping(value = "/get/with/cookies",method = RequestMethod.GET) @ApiOperation(value = "要求客户端携带cookies访问",httpMethod = "GET") public String getWithCookies(HttpServletRequest request){ Cookie[] cookies = request.getCookies(); if(Objects.isNull(cookies)){ return "你必须携带cookies信息来"; } for(Cookie cookie : cookies){ if(cookie.getName().equals("login") && cookie.getValue().equals("true")){ return "资源访问成功!"; } else { return "cookies信息错误"; } }
return "cookies信息为空,必须携带cookies"; } 携带参数的 GET 请求接口方式可以多样化,这里提供两个作为参考。 携带参数的 GET 请求实现-方式一 示例代码: @RequestMapping(value = "/get/with/param",method = RequestMethod.GET) @ApiOperation(value = "需求携带参数才能访问的get请求方法一",httpMethod = "GET") public Map<String,Integer> getList(@RequestParam Integer start, @RequestParam Integer end){ Map<String,Integer> myList = new HashMap<>(); msg.put("status","0"); msg.put("msg","请求成功"); return myList;
} 携带参数的 GET 请求实现-方式二: 示例代码: @RequestMapping(value = "/get/with/param/{start}/{end}") @ApiOperation(value = "需求携带参数才能访问的get请求的第二种实现",httpMethod = "GET") public Map myGetList(@PathVariable Integer start, @PathVariable Integer end){ Map<String,String > msg = new HashMap<>(); msg.put("status","0"); msg.put("msg","请求成功");
return myList; } POST接口开发 了解完 GET 请求的开发过程后,我们继续学习 POST 方式的接口开发方法。 这里演示登录接口,以及获取用户信息接口两个接口。 示例代码: @RestController @Api(value = "/",description = "TestOps全部的post方法") public class myPost { //这个变量是用来装我们cookies信息的 private static Cookie cookie;
//用户登陆成功获取到cookies,然后再访问其他接口获取到列表 @RequestMapping(value = "/login",method = RequestMethod.POST) @ApiOperation(value = "登陆接口",httpMethod = "POST") public String login(HttpServletResponse response, @RequestParam(value = "userName",required = true) String userName, @RequestParam(value = "password",required = true) String passWord){
if(userName.equals("TestOps") && passWord.equals("123456")){ cookie = new Cookie("login","true"); response.addCookie(cookie); return "恭喜你登陆成功了!"; } return "用户名或者是密码错误!"; }
@RequestMapping(value = "/getUserList", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") @ApiOperation(value = "获取用户信息接口",httpMethod = "POST") public Map<String, String> getUserList(@RequestBody userLogin user) { Map<String,String > msg = new HashMap<>(); if(user.getPassWord().equals("123456")&&user.getUserName().equals("testOps")){ msg.put("status","0"); msg.put("msg","请求成功"); } else { msg.put("status","1"); msg.put("msg","用户名或者密码错误");} return msg; } } } 其中userLogin代码为: public class userLogin { private String userName; private String passWord;
public String getUserName() { return userName; }
public void setUserName(String userName) { this.userName = userName; }
public String getPassWord() { return passWord; }
public void setPassWord(String passWord) { this.passWord = passWord; }
@Override public String toString() { return "User{" + "userName='" + userName + '\'' + ",passWord='" + passWord + '\'' + '}'; } } 在了解 GET 和 POST 接口的实现之后,我们一起来看看如何整合 Swagger 实现在线的接口文档的功能。 Swagger 首先需要在 pom.xml 中添加相关依赖: <!--集成swagger2--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency> 并添加对应的配置文件: @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .pathMapping("/") .select() // 选择那些路径和api会生成document .apis(RequestHandlerSelectors.any())// 对所有api进行监控 .paths(Predicates.not(PathSelectors.regex("/error.*")))//错误路径不监控 .paths(PathSelectors.regex("/.*"))// 对根下所有路径进行监控 .build(); }
private ApiInfo apiInfo() { return new ApiInfoBuilder().title("TestOps接口文档") .contact(new Contact("TestOps", "http://www./", "11054212787@qq.com")) .description("TestOps测试运维从零开始项目接口文档") .termsOfServiceUrl("TestOps测试运维从零开始") .license("The Apache License, Version 2.0") .licenseUrl("http://www./licenses/LICENSE-2.0.html") .version("v1.0") .build(); } } 配置完成之后,即可使用相关注解修饰指定的接口。 示例: // @Api:用在类上,说明该类的作用 @Api(value = "v1",description = "用户信息接口")
// @ApiOperation:用在方法上,说明方法的作用 @ApiOperation(value = "可以获取到用户数",httpMethod = "GET") @ApiOperation(value = "通过用户名查询用户信息", notes = "通过用户名查询用户信息")
// @ApiResponses:于表示一组响应 @ApiResponses(value = { @ApiResponse(code = 200, message = "保存成功"), @ApiResponse(code = 401, message = "没有权限"), @ApiResponse(code = 403, message = "被禁止访问"), @ApiResponse(code = 404, message = "没有找到") } 大家也可以使用: @ApiImplicitParam:用在方法上包含一组参数说明) @ApiModel:描述一个Model的信息,一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候 @ApiModelProperty:描述一个model的属性 等相关注解 接口文档查看 访问:http://localhost:8085/testops/swagger-ui.html#/ 就可以看到对应的在线文档: 在整合 Swagger 文档的时候,如果觉得 Swagger 的原生界面不是很友好,可以考虑使用 knife4j 。 添加相关依赖即可: <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.6</version> </dependency>
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-springdoc-ui</artifactId> <version>2.0.6</version> </dependency>
|
|