# ownTemplate **Repository Path**: xignzi/ownTemplate ## Basic Information - **Project Name**: ownTemplate - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-08-19 - **Last Updated**: 2022-08-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 服务接口模板 [![](https://img.shields.io/static/v1?label=SpringBoot&message=2.0.1.RELEASE&color=green)](https://spring.io/projects/spring-boot) [![](https://img.shields.io/static/v1?label=Swagger&message=2.9.2&color=green)](https://github.com/swagger-api/swagger-ui) [![](https://img.shields.io/static/v1?label=iBizSys模型&message=service&color=green)](https://modelapi.ibizlab.cn) ## 介绍说明 基于iBizSys模型,结合SpringBoo发布服务接口,集成Swagger2自动生成接口文档。 ## 快速开始 ``` 在此之前,我们假设您已经: ·熟悉iBiz6平台 ·熟悉SpringBoot ·熟悉Swagger ·熟悉FreeMaker ``` ## iBiz配置服务接口 ### 配置系统服务接口 ![produce](http://172.16.180.231/wx/images/sysapi.png) ### 配置实体服务接口 ![produce](http://172.16.180.231/wx/images/deapi.png) ## 构建发布模板 ### 服务实体模型: ```java <#ibiztemplate> TARGET=PSDESERVICEAPI package ${pub.getPKGCodeName()}.api.${item.getPSSysServiceAPI().getCodeName()?lower_case}.model; import java.util.List; import lombok.Data; import java.sql.Timestamp; @Data public class ${item.getCodeName()} { <#list item.getPSDEServiceAPIFields() as apifield> private ${srfjavatype(apifield.getPSDEField().stdDataType)} ${apifield.getPSDEField().codeName?lower_case}; <#list item.getPSDEServiceAPIRSs() as apider> List <${apider.getMinorPSDEServiceAPI().getCodeName()}> ${apider.getParentFilter()}; } ``` ### RestController模板: ```java <#ibiztemplate> TARGET=PSDESERVICEAPI <#if item.isMajor()> <#macro buildApi deapi rootPath levels> <#if deapi.getPSDEServiceAPIMethods()??> <#list deapi.getPSDEServiceAPIMethods() as apiMethod> <#if apiMethod.getActionType()=='DEACTION'> @ApiOperation(value = "${apiMethod.getPSDEAction().getLogicName()}", tags = {"${item.getCodeName()}" }, notes = "${apiMethod.getPSDEAction().getLogicName()}") @RequestMapping(method= RequestMethod.${apiMethod.getRequestMethod()} , value="${rootPath}<#if (apiMethod.getPSDEAction().getName()=='Create')><#else>/{${deapi.getPSDataEntity().getKeyPSDEField().getCodeName()?lower_case}}<#if (apiMethod.getPSDEAction().getName()='Get'||apiMethod.getPSDEAction().getName()='Create'||apiMethod.getPSDEAction().getName()='Update'||apiMethod.getPSDEAction().getName()='Remove')><#else>/${apiMethod.getPSDEAction().getCodeName()?lower_case}") public ${deapi.getCodeName()} ${apiMethod.getPSDEAction().getCodeName()}${deapi.getPSDataEntity().getCodeName()}(<#list levels as level>@PathVariable String ${level},@PathVariable String ${deapi.getPSDataEntity().getKeyPSDEField().getCodeName()?lower_case}<#if (apiMethod.getRequestMethod()=='GET')><#else>/*,@RequestBody ${deapi.getCodeName()} ${deapi.getPSDataEntity().getCodeName()?lower_case}*/) { return null ; } <#elseif apiMethod.getActionType()=='FETCH'> @ApiOperation(value = "获取${apiMethod.getPSDEDataSet().getLogicName()}", tags = {"${item.getCodeName()}" } ,notes = "获取${apiMethod.getPSDEDataSet().getLogicName()}") @RequestMapping(method= RequestMethod.${apiMethod.getRequestMethod()} , value="${rootPath}/search<#if (apiMethod.getPSDEDataSet().getName()=='DEFAULT')><#else>-${apiMethod.getPSDEDataSet().getCodeName()?lower_case}") public List<${deapi.getCodeName()}> search${deapi.getPSDataEntity().getCodeName()}<#if (apiMethod.getPSDEDataSet().getName()=='DEFAULT')><#else>${apiMethod.getPSDEDataSet().getCodeName()} () { return null ; } <#if deapi.getPSDEServiceAPIRSs()??> <#list deapi.getPSDEServiceAPIRSs() as apider> <@buildApi deapi=apider.getMinorPSDEServiceAPI() rootPath= rootPath + '/{' + deapi.getPSDataEntity().getKeyPSDEField().getCodeName()?lower_case +'}/' + apider.getMinorPSDEServiceAPI().getCodeName()?lower_case levels= levels + [deapi.getPSDataEntity().getKeyPSDEField().getCodeName()?lower_case] /> package ${pub.getPKGCodeName()}.api.${item.getPSSysServiceAPI().getCodeName()?lower_case}.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ${pub.getPKGCodeName()}.api.${item.getPSSysServiceAPI().getCodeName()?lower_case}.model.*; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; @Api(tags = {"${item.getCodeName()}" }, description = "${item.getName()}") @RestController @RequestMapping("/${item.getPSSysServiceAPI().getCodeName()?lower_case}/${item.getCodeName()?lower_case}") public class ${item.getCodeName()}Resource { <@buildApi deapi=item rootPath='' levels=[] /> } ``` ### Swagger配置模板: ```java <#ibiztemplate> TARGET=PSSYSSERVICEAPI package ${pub.getPKGCodeName()}.api.${item.getCodeName()?lower_case}.swagger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ComponentScan; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 @ComponentScan("${pub.getPKGCodeName()}.api.${item.getCodeName()?lower_case}") public class SwaggerConfiguration { @Bean public Docket createDocket() { return new Docket(DocumentationType.SWAGGER_2) .groupName("${item.getName()}") .apiInfo( new ApiInfoBuilder() .title("${item.getName()}") .description("${item.getMemo()}") .termsOfServiceUrl("https://xxxx") .version("${item.getAPIVersion()}.0") .build() ) .select() .apis(RequestHandlerSelectors.basePackage("${pub.getPKGCodeName()}.api.${item.getCodeName()?lower_case}")) .paths(PathSelectors.any()) .build() ; } } ``` ## 查看最终成果物 ### 发布代码 ![produce](http://172.16.180.231/wx/images/apipubcode.png) ### 查看Swagger ![produce](http://172.16.180.231/wx/images/apiswagger.png)