媒介
前一章节先容了mybatisPlus
的集成和简朴利用,本章节开始接着上一章节的用户表,举办Swagger2
的集成。此刻都履行前后端疏散
开拓和微处事大行其道,分微处事及前后端疏散后,前后端开拓的相同本钱就增加了。所以一款强大的RESTful API
文档就至关重要了。而今朝在后端规模,根基上是Swagger
的天下了。
Swagger2先容
Swagger
是一款RESTful
接口的文档在线自动生成、成果测试成果框架。一个类型和完整的框架,用于生成、描写、挪用和可视化RESTful
气势气魄的Web处事,加上swagger-ui
,可以有很好的泛起。
SpringBoot集成
这里选用的swagger版本为:2.8.0
<!--swagger --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.8.0</version> </dependency>
主要是添加注解@EnableSwagger2和界说Docket的bean类。
@EnableSwagger2 @Configuration public class SwaggerConfig { //是否开启swagger,正式情况一般是需要封锁的,可按照springboot的多情况设置举办配置 @Value(value = "${swagger.enabled}") Boolean swaggerEnabled; @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()) // 是否开启 .enable(swaggerEnabled).select() // 扫描的路径包 .apis(RequestHandlerSelectors.basePackage("cn.lqdev.learning.springboot.chapter10")) // 指定路径处理惩罚PathSelectors.any()代表所有的路径 .paths(PathSelectors.any()).build().pathMapping("/"); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("SpringBoot-Swagger2集成和利用-demo示例") .description("oKong | 趔趄的猿") // 作者信息 .contact(new Contact("oKong", "https://blog.lqdev.cn/", "499452441@qq.com")) .version("1.0.0") .build(); } }
UserController
/** * 用户节制层 简朴演示增删改查及分页 * 新增了swagger文档内容 2018-07-21 * @author oKong * */ @RestController @RequestMapping("/user") @Api(tags="用户API") public class UserController { @Autowired IUserService userService; @PostMapping("add") @ApiOperation(value="用户新增") //正常业务时, 需要在user类内里举办事务节制,节制层一般不举办业务节制的。 //@Transactional(rollbackFor = Exception.class) public Map<String,String> addUser(@Valid @RequestBody UserReq userReq){ User user = new User(); user.setCode(userReq.getCode()); user.setName(userReq.getName()); //由于配置了主键计策 id可不消赋值 会自动生成 //user.setId(0L); userService.insert(user); Map<String,String> result = new HashMap<String,String>(); result.put("respCode", "01"); result.put("respMsg", "新增乐成"); //事务测试 //System.out.println(1/0); return result; } @PostMapping("update") @ApiOperation(value="用户修改") public Map<String,String> updateUser(@Valid @RequestBody UserReq userReq){ if(userReq.getId() == null || "".equals(userReq.getId())) { throw new CommonException("0000", "更新时ID不能为空"); } User user = new User(); user.setCode(userReq.getCode()); user.setName(userReq.getName()); user.setId(Long.parseLong(userReq.getId())); userService.updateById(user); Map<String,String> result = new HashMap<String,String>(); result.put("respCode", "01"); result.put("respMsg", "更新乐成"); return result; } @GetMapping("/get/{id}") @ApiOperation(value="用户查询(ID)") @ApiImplicitParam(name="id",value="查询ID",required=true) public Map<String,Object> getUser(@PathVariable("id") String id){ //查询 User user = userService.selectById(id); if(user == null) { throw new CommonException("0001", "用户ID:" + id + ",未找到"); } UserResp resp = UserResp.builder() .id(user.getId().toString()) .code(user.getCode()) .name(user.getName()) .status(user.getStatus()) .build(); Map<String,Object> result = new HashMap<String,Object>(); result.put("respCode", "01"); result.put("respMsg", "乐成"); result.put("data", resp); return result; } @GetMapping("/page") @ApiOperation(value="用户查询(分页)") public Map<String,Object> pageUser(int current, int size){ //分页 Page<User> page = new Page<>(current, size); Map<String,Object> result = new HashMap<String,Object>(); result.put("respCode", "01"); result.put("respMsg", "乐成"); result.put("data", userService.selectPage(page)); return result; } }