SwaggerApi管理

Swagger一般只在测试环境中搭建,可以在描述中写上不同环境中的接口地址,正式环境中一般不允许做接口测试。

网关一般只对外网访问生效,内网访问一般直接进行访问,不需要通过网关,系统安全要求较高的可以通过类似/public/...代表f访问来源于外网,/private/...代表访问来源于内网

一、单体应用中使用SwaggerApi生成API文档

1.引入Swagger依赖包

       <!-- swagger-spring-boot -->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.7.0.RELEASE</version>
        </dependency>

2.配置文件

####swagger相关配置
swagger:
  base-package: com.tx.servicemember.impl
  title: SpringCloud2.x构建微服务电商项目-微信服务接口
  description: 该项目“基于SpringCloud2.x构建微服务电商项目”未经过允许的情况下,私自分享视频和源码属于违法行为。
  version: 1.1
  terms-of-service-url: www.tx.com
  contact:
    name: sunny
    email: 860074898@qq.com

3.启动类加注解,开启Swagger功能

@EnableSwagger2Doc

4.在实现类中进行接口说明@ApiOperation  @Api

@Api(tags = "会员服务接口")
public interface MemberService {

    /**
     * 功能说明: 会员服务接口调用微信接口
     */
    @ApiOperation(value = "会员服务调用微信服务")
    @GetMapping("/memberInvokeWeixin")
    public AppEntity memberInvokeWeixin();

}

5.查看SwaggerApi效果

http://127.0.0.1:8300/swagger-ui.html

链接:https://pan.baidu.com/s/1zLQO2Ix3oNwHSc0tSv8fXg 
提取码:jqes 

二、使用网关统一管理apiSwagger

如果不使用网关统一管理ApiSwagger,那访问服务接口API的地址就有多个,N个服务就有N个地址,例如

http://127.0.0.1:8200/swagger-ui.html#/

http://127.0.0.1:8300/swagger-ui.html#/

这样管理API文档会非常繁琐,增加网关后就只需要在一个主页面可以对所有的API文档进行查看和管理。

http://127.0.0.1:8000/swagger-ui.html#/

1.新建Zuul网关子项目,添加依赖

 <!-- zuul-网关 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
 <!--管理依赖-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2.在zuul启动类中增加相关扫描接口的代码

package com.tx.zuul;

import com.spring4all.swagger.EnableSwagger2Doc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;

import java.util.ArrayList;
import java.util.List;

/***
 * @Author Sunny
 * @Description //TODO  Zuul微服务网关服务
 * @Date 11:14 2019/9/17
 * @Param
 * @return
 */
@SpringBootApplication
@EnableSwagger2Doc
@EnableEurekaClient
@EnableZuulProxy
public class DhccShopBasicsSpringcloudZuulApplication {

    public static void main(String[] args) {
        SpringApplication.run(DhccShopBasicsSpringcloudZuulApplication.class, args);
    }


    // 添加文档来源
    @Component
    @Primary
    class DocumentationConfig implements SwaggerResourcesProvider {
        @Override
        public List<SwaggerResource> get() {

            List resources = new ArrayList();
            // app-itmayiedu-order
            // 网关使用服务别名获取远程服务的SwaggerApi
            resources.add(swaggerResource("app-tx-member", "/app-tx-member/v2/api-docs", "2.0"));
            resources.add(swaggerResource("app-tx-weixin", "/app-tx-weixin/v2/api-docs", "2.0"));
            return resources;
        }

        private SwaggerResource swaggerResource(String name, String location, String version) {
            SwaggerResource swaggerResource = new SwaggerResource();
            swaggerResource.setName(name);
            swaggerResource.setLocation(location);
            swaggerResource.setSwaggerVersion(version);
            return swaggerResource;
        }

    }
}

3.新增配置文件内容

###服务启动端口号,网关端口号一般都是80,但是为了保持项目统一使用8000
server:
  port: 8000
###服务名称(服务注册到eureka名称)
spring:
  application:
    name: app-tx-zuul
###服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8100/eureka

### 配置网关反向代理
zuul:
  routes:
    api-a:
      ### 以 /api-weixin/访问转发到会员服务
      path: /api-weixin/**
      serviceId: app-tx-weixin
    api-b:
      ### 以 /api-member/访问转发到订单服务
      path: /api-member/**
      serviceId: app-tx-member

4.启动服务查看SwaggerAPI效果

5.通过网关进行统一访问

http://127.0.0.1:8300/memberInvokeWeixin

http://127.0.0.1:8000/api-member/memberInvokeWeixin 

IP+网关端口+访问服务路径+接口

链接:https://pan.baidu.com/s/1t1DFfA5mm1FtlACI0INJFg 
提取码:nj9j

 

三.Swagger2异常:java.lang.NumberFormatException:For input string:""

2019-01-07 18:23:03.830  WARN 21940 --- [nio-8080-exec-6] i.s.m.p.AbstractSerializableParameter    : Illegal DefaultValue  for parameter type integer
 
java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_171]
    at java.lang.Long.parseLong(Long.java:601) ~[na:1.8.0_171]
    at java.lang.Long.valueOf(Long.java:803) ~[na:1.8.0_171]
    at io.swagger.models.parameters.AbstractSerializableParameter.getExample(AbstractSerializableParameter.java:412) ~[swagger-models-1.5.20.jar:1.5.20]
    at sun.reflect.GeneratedMethodAccessor87.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_171]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:654) [jackson-databind-2.6.5.jar:2.6.5]
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:675) [jackson-databind-2.6.5.jar:2.6.5]
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157) [jackson-databind-2.6.5.jar:2.6.5]
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) [jackson-databind-2.6.5.jar:2.6.5]
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79) [jackson-databind-2.6.5.jar:2.6.5]
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18) [jackson-databind-2.6.5.jar:2.6.5]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:693) [jackson-databind-2.6.5.jar:2.6.5]
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:675) [jackson-databind-2.6.5.jar:2.6.5]
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157) [jackson-databind-2.6.5.jar:2.6.5]


解决方法:pom.xml中引入包

        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.21</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.21</version>
        </dependency>


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值