# java2ts **Repository Path**: enroy/java2ts ## Basic Information - **Project Name**: java2ts - **Description**: springmvc转前端TypeScript - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-12-20 - **Last Updated**: 2023-01-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: TypeScript, Java, Spring-MVC, Swagger ## README = java转ts 本项目旨在为提供一个自动生成前端http访问模型的能力,通过扫描后端服务接口进行前端代码生成。 当前仅支持springMVC注解扫描,进行ts格式数据模型生成。 == 源码地址 https://github.com/enroyCode/java2ts.git[github] https://gitee.com/enroy/java2ts.git[gitee] == quickStart 提供dmeo工程 `java2ts-sampler` 启动后运行 `src/resources` 目录下的 `download.http` 文件即可生成前端模型代码。 == 依赖 [source,xml] ---- io.gitee.enroy java2ts-spring-boot-starter ${java2ts-spring-boot-starter.version} ---- == 配置说明 [source,yaml] ---- java2ts: enabled: # 是否启用 true or false baseScanPackage: # 指定扫描的包路径 outputPath: # 文件输出根目录,默认值 java2ts-ui apiRootPath: # 相对outputPath的api根目录,默认值 api modelRootPath: # 相对outputPath的model根目录,默认值 model fileExtension: # 生成的api和model的文件名拓展名,默认值 ts srcPath: # src目录替代符,默认值 @ semicolonEnd: # import及变量定义是否以";"结尾,默认值true apiClientFactoryName: # ApiClient的client名,默认值ApiClientFactory apiClientInstanceMethod: # ApiClient的client名,默认值client() promiseResolveReturn: # promise.then ,默认值data => return res.data nullableDeclare: # 可为空对象声明,默认值 Nullable,通常在.d.ts文件中增加:declare type Nullable = T | null | undefined; ---- == RuntimeExProperties [扩展功能] === apiFilter [扫描api时,忽略指定api] [source,java] ---- @Configuration public class Java2tsConfiguration { @Bean public RuntimeExProperties runtimeExConfig() { return RuntimeExProperties.builder()// .apiFilter(TestController.class)// 扫描api时,忽略指定api .build(); } } ---- === entityRenameSuffix [修改模型结尾] [source,java] ---- @Configuration public class Java2tsConfiguration { @Bean public RuntimeExProperties runtimeExConfig() { return RuntimeExProperties.builder()// .entityRenameSuffix("Controller", "Api")// 修改类以Controller结尾改为以Api结尾 .build(); } } ---- === entityRename [修改模型名] [source,java] ---- @Configuration public class Java2tsConfiguration { @Bean public RuntimeExProperties runtimeExConfig() { return RuntimeExProperties.builder()// .entityRename(Test.class, "MyTest")// 修改类名 .build(); } } ---- === modelPathRule [修改包路径] [source,java] ---- @Configuration public class Java2tsConfiguration { @Bean public RuntimeExProperties runtimeExConfig() { return RuntimeExProperties.builder()// .modelPathRule((cls) -> {// Package pkg = cls.getPackage(); String pkgStr = pkg == null ? "" : pkg.getName(); if (pkgStr.startsWith("io.gitee.enroy.java2ts.sampler")) { return true; } return false; }, (cls) -> { String pkgName = cls.getPackage().getName(); int index = pkgName.indexOf("controller"); if (index > -1) { return pkgName.substring(index + "controller".length() + 1); } return pkgName.substring("io.gitee.enroy.java2ts.sampler".length()); }) // .build(); } } ---- === ApiClientFactory样本文件 [source,typescript] ---- import axios, {AxiosInstance} from 'axios/index'; import {AxiosRequestConfig, AxiosResponse} from 'axios'; axios.defaults.timeout = 10000; export default class ApiClientFactory { /** * */ public static client() { // 可以在这里拦截 return this.getNewInstance(''); } public static getNewInstance(baseUrl: string): AxiosInstance { const instance = axios.create({ baseURL: baseUrl, }) as AxiosInstance; this.interceptors(instance); return instance; } public static interceptors(instance: AxiosInstance) { // 请求拦截器 instance.interceptors.request.use(function (config: AxiosRequestConfig) { config.headers = ApiClientFactory.getHeaders(); return config; }, function (error: any) { return Promise.reject(error); }); // 响应拦截器 instance.interceptors.response.use(function (response: AxiosResponse) { if (response.data.errcode == '0') { return response.data; } else { let error = new Error(); (error as any).response = response.data; throw error; } }, function (error) { if (error.response && error.response.status) { if (error.response.status === 502) { error.message = '请检查网络设置'; return Promise.reject(error); } if (error.response.status === 503) { error.message = '服务升级中,请稍后再试'; return Promise.reject(error); } if (error.response.status === 401) { // FIXME 401通常有重定向到登录页机制 return Promise.reject(error); } } return Promise.reject(error.response.data); }); } public static getHeaders() { return { 'x-requested-with': 'XMLHttpRequest', 'content-type': 'application/json', } as any; } } ----