好处
- 省得写接口文档。
代码集成
引入swagger
<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>
在
Application.java同级创建Swagger2的配置类Swagger2此处需要注意com.didispace.web更新为你自己Controller所在路径,否则无法查询到方法。 ```java @Configuration @EnableSwagger2 public class Swagger2 {
@Bean public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.didispace.web")).paths(PathSelectors.any()).build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("Spring Boot中使用Swagger2构建RESTful APIs").description("更多Spring Boot相关文章请关注:http://blog.didispace.com/").termsOfServiceUrl("http://blog.didispace.com/").contact("程序猿DD").version("1.0").build();
}
}
- 在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容。如下所示,我们通过`@ApiOperation`注解来给API增加说明、通过`@ApiImplicitParams`、`@ApiImplicitParam`注解来给参数增加说明。- 在Controller代码里加入注释即可(如下述的@ApiOperation)```java@RestController@RequestMapping(value="/users") // 通过这里配置使下面的映射都在/users下,可去除public class UserController {static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());@ApiOperation(value="获取用户列表", notes="")@RequestMapping(value={""}, method=RequestMethod.GET)public List<User> getUserList() {List<User> r = new ArrayList<User>(users.values());return r;}@ApiOperation(value="创建用户", notes="根据User对象创建用户")@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")@RequestMapping(value="", method=RequestMethod.POST)public String postUser(@RequestBody User user) {users.put(user.getId(), user);return "success";}@ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息")@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")@RequestMapping(value="/{id}", method=RequestMethod.GET)public User getUser(@PathVariable Long id) {return users.get(id);}@ApiOperation(value="更新用户详细信息", notes="根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long"),@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")})@RequestMapping(value="/{id}", method=RequestMethod.PUT)public String putUser(@PathVariable Long id, @RequestBody User user) {User u = users.get(id);u.setName(user.getName());u.setAge(user.getAge());users.put(id, u);return "success";}@ApiOperation(value="删除用户", notes="根据url的id来指定删除对象")@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")@RequestMapping(value="/{id}", method=RequestMethod.DELETE)public String deleteUser(@PathVariable Long id) {users.remove(id);return "success";}}
UserModel
上述代码需要用到的 ```java @Data @ApiModel public class User { @ApiModelProperty(value=”id-1”) private Long id;
@ApiModelProperty(value=”username-1”) private String name;
@ApiModelProperty(value=”age-1”) private String age;
//getter,setter }
```
注意事项
- 问题一:若无法显示接口,请检查RequestHandlerSelectors.basePackage是否已更新路径。
- 问题二:如果使用了SpringSecurity,记得更新设置权限(以防路径被拦截)。
