微信小程序開發(fā)和vue開發(fā)差不多
使用SpringBoot開發(fā)微信小程序后臺
這次開發(fā)和以往不同的是使用了聚合工程,這是第一次使用,這一次使用的方法是先創(chuàng)建一個SpringBoot工程,并將父工程pom.xml文件中打包類型作為pom包,然后新建Module類型為Maven項目

其中common為負責(zé)存放工具類
pojo存放實體層
mapper存放dao接口
service為服務(wù)層
api為外部接口層(如controller 其中項目啟動的Application類也在其中)
一個自動生成ID的工具
import org.n3r.idworker.Sid;
@Autowired
private Sidsid;
sid.nextShort()
使用SWAGGER2工具構(gòu)建restful接口
優(yōu)點
1.可以生成文檔形式的api并提供給不同的團隊
2.便于自測,也便于領(lǐng)導(dǎo)查閱任務(wù)量
3.無需過多冗余的word文檔
使用方法
和SpringBoot的Application類的同級目錄下新建一個類名為Swagger2
進行以下編寫
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class Swagger2 {
@Bean
? ? public DocketcreateRestApi() {
// 為swagger添加header參數(shù)可供輸入
? ? ? ? ParameterBuilder userTokenHeader =new ParameterBuilder();
? ? ? ? ParameterBuilder userIdHeader =new ParameterBuilder();
? ? ? ? List pars =new ArrayList();
? ? ? ? userTokenHeader.name("headerUserToken").description("userToken")
.modelRef(new ModelRef("string")).parameterType("header")
.required(false).build();
? ? ? ? userIdHeader.name("headerUserId").description("userId")
.modelRef(new ModelRef("string")).parameterType("header")
.required(false).build();
? ? ? ? pars.add(userTokenHeader.build());
? ? ? ? pars.add(userIdHeader.build());
? ? ? ? return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
.apis(RequestHandlerSelectors.basePackage("com.jian.controller"))
.paths(PathSelectors.any()).build()
.globalOperationParameters(pars);
? ? }
/**
? ? * @Description: 構(gòu)建 api文檔的信息
*/
? ? private ApiInfoapiInfo() {
return new ApiInfoBuilder()
// 設(shè)置頁面標(biāo)題
? ? ? ? ? ? ? ? .title("使用swagger2構(gòu)建短視頻后端api接口文檔")
// 設(shè)置聯(lián)系人
? ? ? ? ? ? ? ? .contact(new Contact("KennyJian", null, "kenny_jian@foxmail.com"))
// 描述
? ? ? ? ? ? ? ? .description("歡迎訪問短視頻接口文檔,這里是描述信息")
// 定義版本號
? ? ? ? ? ? ? ? .version("1.0").build();
? ? }
在控制層類類名上添加一個注解
@Api(value ="用戶注冊登陸的接口",tags = {"注冊和登陸的controller"})
value是Api的說明 tags是標(biāo)簽
在實體類中
在實體類類名上添加一個注解
@ApiModel(value ="用戶對象",description ="這是用戶對象")
當(dāng)前端傳來參數(shù)的時候可以用以下注解來配對
@ApiImplicitParam(name="userId",value="用戶id",required =true,dataType ="String",paramType ="query")
name:標(biāo)識
value:對字段的解釋
required:是否必須
dataType:傳來參數(shù)的類型
paramType:傳來的格式 如?拼接
對需要前臺傳來參數(shù)的屬性添加注解
@ApiModelProperty(value ="這是一個用戶名",name ="username",example ="kenny",required =true)
private String? username;
value:對該值的說明
name:名字
example:占位符,在沒有輸入之前的一種參考樣式
required:是否必要
對不需要傳來的屬性添加如下注解
@ApiModelProperty(hidden =true)
最后進入以下網(wǎng)址進入swagger2 ui的界面
http://localhost:8080/swagger-ui.html#
登陸功能開發(fā)
這里登陸用到的redis
每一次的登陸請求后通過
String uniqueToken= UUID.randomUUID().toString();
隨機生成一個UUID作為token
然后以user-redis-session:用戶id作為鍵? UUID作為值的方式存入redis數(shù)據(jù)庫,同時為他設(shè)立生命周期保證登陸時效,然后在微信前端上的App聲明一個userInfo的變量存儲用戶的VO對象(VO就是數(shù)據(jù)層傳輸中可能和數(shù)據(jù)庫層的屬性會有差別,和需求有關(guān)系),后面可以根據(jù)這個token判斷是否成功登陸.
注銷功能開發(fā)
根據(jù)用戶id刪除reids中的數(shù)據(jù)就可以
然后讓全局變量的userInfo=null
開發(fā)頭像上傳功能
前臺調(diào)用選擇圖片和上傳圖片的api
后臺接收到文件后保存到本地硬盤中
可通過
IOUtils.copy(inputStream,fileOutputStream);
這個API進行文件的傳輸
最后更新數(shù)據(jù)庫頭像文件的路徑
如何顯示服務(wù)器端的圖片到前端上
在SpringBoot的Application類的同級目錄上新建一個類
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
? ? public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/META-INF/resources/")
.addResourceLocations("file:E:/code/workspace_wxxcx/jian_video_users_dev/");
? ? }
}
這樣前端可能直接以url的形式訪問到服務(wù)器端的資源進行圖片,音頻,視頻的顯示或查看
關(guān)于微信小程序與實體機展示不同
????今天測試登陸界面在安卓實體機發(fā)現(xiàn)輸入框位置不對放入到下一行,而蘋果機器則無問題.經(jīng)過排查發(fā)現(xiàn)輸入框長度并為設(shè)置導(dǎo)致過長使安卓機將輸入框放入到了下一行上
在實體類中某屬性加入@JsonIgnore注釋可能不讓該屬性發(fā)送到前端(比如密碼屬性不希望也傳給前端,注意是加在VO層,因為是VO層傳輸出去)
使用ffmpeg工具
這款工具是一個視頻工具,能夠通過命令行直接轉(zhuǎn)換視頻格式等其他功能.
例:ffmpeg.exe -i input.mp4 output.avi 后面兩個分別為原文件和轉(zhuǎn)換后文件的名字
使用Java使用這個工具
使用Java調(diào)用exe文件 首先新建一個List集合,這個集合負責(zé)存放命令
例如:
List command=new ArrayList<>();
command.add(ffmpegEXE);
command.add("-i");
command.add(videoInputPath);
command.add(videoOutputPath);? ? ?就能完整的構(gòu)建出一個命令
然后通過ProcessBuilder類傳入command的參數(shù)構(gòu)建一個進程類,
這個類有個方法為start方法就可以直接執(zhí)行exe文件.
如果想看文件執(zhí)行詳情,可以通過調(diào)用start方法后返回的Process對象獲取他的輸入流進行查看.
例如:
Process process=processBuilder.start();
InputStream errorStream=process.getErrorStream();
再一步步獲取其他流便可