前言
这篇文章收录了在前后端分离开发中,作为后端开发会经常用到的一些模板代码,以方便后面写项目时CV(你们懂的)。
后端统一结果集封装代码
后端开发中因为需要与前端约定好数据交互是否成功的消息格式,所以这里我们用一个Result类来封装结果集。不同的人代码一般都不一样,不过里面部分要素都是必有的:
1、是否成功,一般用code表示(如200表示成功,400表示异常)
2、结果消息
3、结果数据
下面代码中用0表示成功,-1表示失败。
@Data
public class Result implements Serializable {
private String code;
private String msg;
private Object data;
public static Result succ(Object data) {
Result m = new Result();
m.setCode("0");
m.setData(data);
m.setMsg("操作成功");
return m;
}
public static Result succ(String mess, Object data) {
Result m = new Result();
m.setCode("0");
m.setData(data);
m.setMsg(mess);
return m;
}
public static Result fail(String mess) {
Result m = new Result();
m.setCode("-1");
m.setData(null);
m.setMsg(mess);
return m;
}
public static Result fail(String mess, Object data) {
Result m = new Result();
m.setCode("-1");
m.setData(data);
m.setMsg(mess);
return m;
}
}
数据库配置文件模板代码
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 121314
url: jdbc:mysql://localhost:3306/vueblog?useUnicode=true&autoReconnect=true&characterEncoding=utf8
跨域问题
前后端分离开发跨域这一块儿肯定是跑不了的,下面的代码无脑复制即可。
后端跨域处理:
/**
* 解决跨域问题
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
.allowCredentials(true)
.maxAge(3600)
.allowedHeaders("*");
}
}
前端跨域处理:
一般叫vue.config.js文件
// 跨域配置
module.exports = {
devServer: { //记住,别写错了devServer//设置本地默认端口 选填
port: 9876,
proxy: { //设置代理,必须填
'/api': { //设置拦截器 拦截器格式 斜杠+拦截器名字,名字可以自己定
target: 'http://localhost:9999', //代理的目标地址
changeOrigin: true, //是否设置同源,输入是的
pathRewrite: { //路径重写
'/api': '' //选择忽略拦截器里面的单词
}
}
}
}
}
后端解决跨域
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CorsConfig {
// 当前跨域请求最大有效时长。这里默认1天
private static final long MAX_AGE = 24 * 60 * 60;
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
corsConfiguration.setMaxAge(MAX_AGE);
source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
return new CorsFilter(source);
}
}
axios封装
一般叫request.js文件
import axios from 'axios'
const request = axios.create({
//baseURL: '/api',
timeout: 5000
})
// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token,对请求参数统一加密
request.interceptors.request.use(config => {
config.headers['Content-Type'] = 'application/json;charset=utf-8';
// config.headers['token'] = user.token; // 设置请求头
return config
}, error => {
return Promise.reject(error)
});
// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
response => {
let res = response.data;
// 如果是返回的文件
if (response.config.responseType === 'blob') {
return res
}
// 兼容服务端返回的字符串数据
if (typeof res === 'string') {
res = res ? JSON.parse(res) : res
}
return res;
},
error => {
console.log('err' + error) // for debug
return Promise.reject(error)
}
)
export default request
mybatisplus代码生成器模板
package com.why.springboot.utils;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import java.util.Collections;
/**
* mp代码生成器
* by 吴海洋
*
* @since 2022-05-11
*/
public class CodeGenerator {
public static void main(String[] args) {
generate();
}
public static void generate() {
//配置数据库信息
FastAutoGenerator.create("jdbc:mysql://localhost:3306/bishe?serverTimezone=GMT%2b8", "root", "121314")
.globalConfig(builder -> {
builder.author("吴海洋") // 设置作者
// .enableSwagger() // 开启 swagger 模式,没用就直接注释掉即可
.fileOverride() // 覆盖已生成文件
.outputDir("E:\\毕设项目\\springboot\\src\\main\\java\\"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.why.springboot") // 设置父包名
.moduleName(null) // 设置父包模块名,没有不用的话就传null就行
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "E:\\毕设项目\\springboot\\src\\main\\resources\\mapper\\")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.entityBuilder().enableLombok();//开启lombok注解
// builder.mapperBuilder().enableMapperAnnotation(); //开启mapper接口上增加@mapper注解(若已经加过mp的包扫描则也可以不开)
builder.controllerBuilder().enableRestStyle();//开启@RestController控制器
builder.controllerBuilder().enableHyphenStyle();//开启驼峰连转字符(接口路径中有下划线的话运行时自动转化为驼峰)
builder.addInclude("sys_user") // 设置需要生成的表名
.addTablePrefix("t_", "sys_"); // 设置过滤表前缀
})
//因为我们用的velocity,所以下面这句可以注释掉
// .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}