首先引入三个swagger必需的jar包
因为自己目前在学习SpringMVC,还没学习boot,整合swagger的过程中还是半梦半醒的,总算弄成了就记录一下过程。
我这里用的是中央仓库中最新的版本
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
其他的像spring-webmvc包,日志相关包啥的此处就略了
这里再强调一下,网上好多文章都说引入前两个包就够了,然而我这几天学习的时候是不行的,会报ClassNotFoundException,必须要手动引入第三个包。
接下来搭建一个非常简单的web应用结构
Product类
package com.syy.entity;
public class Product {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
/*产品型号*/
private String productClass;
private String productId;
......//get,set方法略
}
ProductController类
package com.syy.controller;
import com.syy.entity.Product;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = {"/product/"})
public class ProductController {
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<Product> get(@PathVariable Long id) {
Product product = new Product();
product.setName("空气净化器");
product.setId(1L);
product.setProductClass("filters");
product.setProductId("T12345");
return ResponseEntity.ok(product);
}
}
//图方便就直接在控制器方法里构建数据了,省略掉service层
AppInitializer类
package com.syy.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
@Configuration
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
RootConfig类啥内容都没就略了
WebConfig类
package com.syy.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
@Import(SwaggerConfig.class)
@ComponentScan(basePackages = {"com.syy.controller"})
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
}
}
swagger3.0版本的访问路径是/swagger-ui/index.html
跟之前的版本不一样,3.0以前是直接/swagger-ui.html。
SwaggerConfig类
package com.syy.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.any()) //显示所有类
// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))//只显示添加了对应注解的类
.build();
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("开放接口API") //粗标题
.description("HTTP对外开放接口") //描述
.version("1.0.0") //api version
.termsOfServiceUrl("http://xxx.xxx.com")
.license("LICENSE") //链接名称
.licenseUrl("http://xxx.xxx.com") //链接地址
.build();
}
}
我这里单独把swagger的配置部分拿了出来,也可以都写在一个配置类里。
另外我这里也没有做接口分组,貌似也不麻烦,暂时没有研究。
然后就可以把项目跑起来了,手动访问swagger-ui/index.html,我截个自己的图
你也可以直接在这里测试控制器方法,挺方便的,自己也算是对REST有了个基本的认知