记录一下自己SpringMVC整合swagger的过程

首先引入三个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有了个基本的认知

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值