SpingCloud集成Swagger

SpingCloud集成Swagger

实现SwaggerResourcesProvider接口,组装SwaggerResource

/**
 * @program: robin
 *           <p>
 *           *** 注释仅供参考,具体以代码为准 ***
 * @description: TODO
 * @author: AuthZz authzz@163.com
 * @create: 2021/1/12 下午2:27
 * @Version: 1.0
 **/
@Component
@Primary
public class RobinSwaggerResourcesProvider implements SwaggerResourcesProvider {
    @Resource
    private DiscoveryClient discoveryClient;

    @Resource
    private LoadBalancerClient loadBalancerClient;


    @Override
    public List<SwaggerResource> get() {

        List<SwaggerResource> resources = new ArrayList<>();
        discoveryClient.getServices().stream().forEach(serviceId -> {
            ServiceInstance selectedInstance = loadBalancerClient.choose(serviceId);
            if (selectedInstance != null) {
                SwaggerResource resource = swaggerResource(serviceId, "/api-docs/" + serviceId);
                resources.add(resource);
            }
        });
        return resources;
    }

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

构建controller获取各个swagger资源

/**
 * @program: robin
 *           <p>
 *           *** 注释仅供参考,具体以代码为准 ***
 * @description: TODO
 * @author: AuthZz authzz@163.com
 * @create: 2021/1/12 下午3:10
 * @Version: 1.0
 **/
@Api(tags = "Swaager测试")

@RestController
@RequestMapping("/api-docs")
public class SwaggerController {

    @Resource
    private LoadBalancerClient loadBalancerClient;

    private RestTemplate restTemplate = new RestTemplate();

    @ApiIgnore
    @GetMapping(value = "{serviceId}", produces = {"application/json", "application/hal+json"})
    public ResponseEntity<HashMap<String, Object>> processSwaggerRequest(@PathVariable("serviceId") String serviceId,
                    HttpServletRequest request) {
        ServiceInstance selectedInstance = loadBalancerClient.choose(serviceId);
        if (selectedInstance != null) {
            URI serviceURI = selectedInstance.getUri();
            String documentationUri = serviceURI.toString() + "/v2/api-docs";
            ResponseEntity<HashMap<String, Object>> swaggerResponse = restTemplate.exchange(documentationUri,
                            HttpMethod.GET, null, new ParameterizedTypeReference<HashMap<String, Object>>() {});
            HashMap<String, Object> swagger = swaggerResponse.getBody();
            swagger.put("host", "");
            swagger.put("basePath", "/" + serviceId);
            return new ResponseEntity<>(swagger, HttpStatus.OK);
        } else {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }
}

出处:https://www.zhihu.com/question/58954233

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值