swagger2:restful管理项目API工具
1、pom.xml增加依赖包
<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> 一定要用2.6.1 不要用2.4.0 会报错误的 如果是2.4.0会报这个错误 Strange exception in logs "ClassNotFoundException: org.mapstruct.Mapper
2、在spring-mvc.xml中声明swagger配置bean
<bean class="springfox.documentation.swagger2.configuration.Swagger2DocumentationConfiguration" id="swagger2Config"/>
3、在spring-mvc.xml中配置资源文件
mvc:resources location="classpath:/META-INF/resources/" mapping="swagger-ui.html"/> <mvc:resources location="classpath:/META-INF/resources/webjars/" mapping="/webjars/**"/>
4、在spring-mvc.xml中配置扫描的路径
<mvc:annotation-driven /> <context:component-scan base-package="com.kind.perm.api" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /> </context:component-scan>
4、在Controller中配置扫描的路径
package com.kind.perm.api.demo; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import com.kind.common.dto.DataGridResult; import com.kind.common.persistence.PageView; import com.kind.perm.api.common.controller.BaseController; import com.kind.perm.core.demo.domain.CommunityDO; import com.kind.perm.core.demo.service.CommunityService; import com.kind.perm.core.system.service.CoFileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; /** * 由于功能都比较简单 故没有写service层 * * @author hao.su */ @Api(description = "用户信息") @RestController @RequestMapping("/user") public class UserController extends BaseController{ // service的注入原来的套路 // @Autowired // private CoFileService coFileService; @Autowired private CommunityService communityService; @ApiOperation(value = "查询用户", notes = "查询用户", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value = "/user.json", params = "name", method = RequestMethod.GET) @ResponseBody public Object selectUser( @ApiParam(required = true, value = "用户名") @RequestParam(required = true) String name) { System.out.println("param name:" + name); Map<String, Object> map = new HashMap<String,Object>(); map.put("status", 0); map.put("data", ""); map.put("message", null); return map; } /** * 获取分页查询列表数据. */ @ApiOperation(value = "查询列表", notes = "查询列表", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value = "selectPageList", method = RequestMethod.GET) @ResponseBody public DataGridResult selectPageList(CommunityDO query, HttpServletRequest request) { PageView<CommunityDO> page = communityService.selectPageList(query); return super.buildDataGrid(page); } }
DataGridResult 我自己定义的返回的json格式,BaseController自己定义的父类 不要纠结,
基本以上就可以了,注意用jetty的时候一定要配置项目的名称,如果不配置项目名称是有问题的会报js错误
swagger2 也不会像 swagger1 一样还要手动引入静态的资源,这都不用的很方便
注意:
如果失败主要看spring-mvc.xml 和 web.xml 有没有拦截什么的 非常好用,配置很白痴很适合咱们这种搬砖的用。