spring boot 自动生成前端axios请求文件 前端更方便调用

springboot 自动生成前端axios请求文件

  • 实现思路
    • spring boot导入swagger编写接口
    • 通过swagger内置的接口**/v2/api-docs**,获取swagger的接口json
    • 使用node调用接口获取数据,并解析json
    • 准备一个axios访问接口的hbs模板(这个根据自己项目调用接口定)
    • 使用node将解析到的json填入到hbs模板中,并生成文件
    • 拿到文件后上传到自己的npm库中
  • 使用
    • vue项目使用时只需要npm 导入你生成的那个文件
    • 接下来调用接口,只需要调用模板里的方法即可

1、spring boot准备工作

  • pow导入相应包
<!--        web-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--        引入swagger2-生产接口文档-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>
  • 配置swagger
//首先在入口文件中加入注解
//@EnableSwagger2//开启swagger注解
//-------------------------------------
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .pathMapping("/")
                .select() // 选择那些路径和api会生成document
                .apis(RequestHandlerSelectors.any())// 对所有api进行监控
                .apis(RequestHandlerSelectors.basePackage("com.xxxx"))
                .build();

    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("vue-admin-接口文档") //设置文档的标题
                .description("文档描述") // 设置文档的描述
                .version("1.0.0") // 设置文档的版本信息-> 1.0.0 Version information
                .termsOfServiceUrl("http://baidu.com") // 设置文档的License信息->1.3 License information
                .build();
    }
}

  • 测试使用 xxxx/v2/api-docs 是否可以获取接口json数据

  • 创建一个node.js服务调用接口,获取json数据后,解析并生成文件

//这里因为每个人的项目中的swagger编写模式不一样,就大概写下思路
//主要解析看自己的接口模式
//通过接口接收swagger json数据
const api = 'swagger'
const express = require('express')
const app = express() //实例化
const swaggerGen = require('./index')
const fs = require('fs')
const path = require('path')
const axios = require('axios')
//调用接口会返回一个buffer文件
app.get('/toSdk', (req, res) => {
  const { swaggerPath } = req.query
  if (!swaggerPath) res.send({ code: 400, msg: '生成失败-缺少参数' })
  //访问接口,并返回sdk
  axios
    .get(swaggerPath)
    .then((data) => {
      //此时生成sdk
      let opt = {
        swagger: data.data
      }
      //生成代码
      const codeResult = swaggerGen(opt)
      //写出文件
      fs.writeFileSync(path.join(__dirname, `./example/${api}.js`), codeResult)
      //返回用一个 buffer文件
      fs.readFile(path.join(__dirname, `./example/${api}.js`), function (error, file) {
        res.send(file)
      })
    })
    .catch((e) => {
      res.send({ code: 400, msg: '生成失败-' + String(e) })
    })
})
//启动服务
app.listen(8600, () => {
  console.log('swagger-to-sdk:8600')
})

  • 获取的json填入模板(生成后)
...-访问模板自己定义
  • 这个是我生成后的,只是个例子,具体看自己的模板
  • 这里我可能不能把解析的逻辑放出来,因为不是一个人写的
  • 拿到生成后的文件上传到npm

2、vue项目中使用

  • npm i 上传的npm项目
  • 导入,并拿到自己需要调用的方法
import { getAxiosInstance, setDomain, saveShopping } from 'hc--shopping-api'
import { setApi } from './index'

//设置请求头
setApi(getAxiosInstance, setDomain, '')

const SaveShopping = params => {
    return saveShopping(params)
}

export default {
    SaveShopping
}

  • 调用接口
//根据自己放入的目录导入
import Api from '@/api'
//调用
Api.SaveShopping().then(res => {

})
.catch(e=>{
    
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tommyrunner

你的支持,就是我的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值