微信小程序开发和vue开发差不多
使用SpringBoot开发微信小程序后台
这次开发和以往不同的是使用了聚合工程,这是第一次使用,这一次使用的方法是先创建一个SpringBoot工程,并将父工程pom.xml文件中打包类型作为pom包,然后新建Module类型为Maven项目
其中common为负责存放工具类
pojo存放实体层
mapper存放dao接口
service为服务层
api为外部接口层(如controller 其中项目启动的Application类也在其中)
一个自动生成ID的工具
import org.n3r.idworker.Sid;
@Autowired
private Sidsid;
sid.nextShort()
使用SWAGGER2工具构建restful接口
优点
1.可以生成文档形式的api并提供给不同的团队
2.便于自测,也便于领导查阅任务量
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参数可供输入
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: 构建 api文档的信息
*/
private ApiInfoapiInfo() {
return new ApiInfoBuilder()
// 设置页面标题
.title("使用swagger2构建短视频后端api接口文档")
// 设置联系人
.contact(new Contact("KennyJian", null, "kenny_jian@foxmail.com"))
// 描述
.description("欢迎访问短视频接口文档,这里是描述信息")
// 定义版本号
.version("1.0").build();
}
在控制层类类名上添加一个注解
@Api(value ="用户注册登陆的接口",tags = {"注册和登陆的controller"})
value是Api的说明 tags是标签
在实体类中
在实体类类名上添加一个注解
@ApiModel(value ="用户对象",description ="这是用户对象")
当前端传来参数的时候可以用以下注解来配对
@ApiImplicitParam(name="userId",value="用户id",required =true,dataType ="String",paramType ="query")
name:标识
value:对字段的解释
required:是否必须
dataType:传来参数的类型
paramType:传来的格式 如?拼接
对需要前台传来参数的属性添加注解
@ApiModelProperty(value ="这是一个用户名",name ="username",example ="kenny",required =true)
private String username;
value:对该值的说明
name:名字
example:占位符,在没有输入之前的一种参考样式
required:是否必要
对不需要传来的属性添加如下注解
@ApiModelProperty(hidden =true)
最后进入以下网址进入swagger2 ui的界面
http://localhost:8080/swagger-ui.html#
登陆功能开发
这里登陆用到的redis
每一次的登陆请求后通过
String uniqueToken= UUID.randomUUID().toString();
随机生成一个UUID作为token
然后以user-redis-session:用户id作为键 UUID作为值的方式存入redis数据库,同时为他设立生命周期保证登陆时效,然后在微信前端上的App声明一个userInfo的变量存储用户的VO对象(VO就是数据层传输中可能和数据库层的属性会有差别,和需求有关系),后面可以根据这个token判断是否成功登陆.
注销功能开发
根据用户id删除reids中的数据就可以
然后让全局变量的userInfo=null
开发头像上传功能
前台调用选择图片和上传图片的api
后台接收到文件后保存到本地硬盘中
可通过
IOUtils.copy(inputStream,fileOutputStream);
这个API进行文件的传输
最后更新数据库头像文件的路径
如何显示服务器端的图片到前端上
在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的形式访问到服务器端的资源进行图片,音频,视频的显示或查看
关于微信小程序与实体机展示不同
今天测试登陆界面在安卓实体机发现输入框位置不对放入到下一行,而苹果机器则无问题.经过排查发现输入框长度并为设置导致过长使安卓机将输入框放入到了下一行上
在实体类中某属性加入@JsonIgnore注释可能不让该属性发送到前端(比如密码属性不希望也传给前端,注意是加在VO层,因为是VO层传输出去)
使用ffmpeg工具
这款工具是一个视频工具,能够通过命令行直接转换视频格式等其他功能.
例:ffmpeg.exe -i input.mp4 output.avi 后面两个分别为原文件和转换后文件的名字
使用Java使用这个工具
使用Java调用exe文件 首先新建一个List集合,这个集合负责存放命令
例如:
List command=new ArrayList<>();
command.add(ffmpegEXE);
command.add("-i");
command.add(videoInputPath);
command.add(videoOutputPath); 就能完整的构建出一个命令
然后通过ProcessBuilder类传入command的参数构建一个进程类,
这个类有个方法为start方法就可以直接执行exe文件.
如果想看文件执行详情,可以通过调用start方法后返回的Process对象获取他的输入流进行查看.
例如:
Process process=processBuilder.start();
InputStream errorStream=process.getErrorStream();
再一步步获取其他流便可