一、解决跨域问题
1、SpringBoot解决跨域问题
源代码:
package com.han.superparking.config;
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;
/**
* SpringBoot解决跨域问题
*/
@Configuration
public class GlobalCorsConfig {
@Bean
public CorsFilter corsFilter() {
//1. 添加 CORS配置信息
CorsConfiguration config = new CorsConfiguration();
//放行哪些原始域
config.addAllowedOriginPattern("*");
//是否发送 Cookie
config.setAllowCredentials(true);
//放行哪些请求方式
config.addAllowedMethod("*");
//放行哪些原始请求头部信息
config.addAllowedHeader("*");
//暴露哪些头部信息
config.addExposedHeader("*");
//2. 添加映射路径
UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration("/**",config);
//3. 返回新的CorsFilter
return new CorsFilter(corsConfigurationSource);
}
}
2、SpringMVC解决跨域问题
在spring-mvc.xml中加入上述这一段。其中,allowed-origins指的是允许的访问源的域名,"*"表示任何人都可以访问,也可以指明具体的域名
<mvc:cors>
<mvc:mapping path="/"
allowed-origins="*"
allowed-methods="POST, GET, OPTIONS, DELETE, PUT,PATCH"
allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
allow-credentials="true" />
</mvc:cors>
二、SpringBoot中全文配置下划线转驼峰
mybatis:
configuration:
map-underscore-to-camel-case: true
三、常见的SpringBoot导入的pom.xml依赖配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.qf</groupId>
<artifactId>boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>boot</name>
<description>boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- 实现热更新的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!-- jwt -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<!-- hutools -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.11</version>
</dependency>
<!-- 验证码 -->
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
<!-- 腾讯云的开发依赖 -->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.824</version>
</dependency>
<!-- 接口文档和测试工具 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Spring Boot配置文件常见配置
# 数据库连接信息的配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/java2208?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
mvc:
# swagger????
pathmatch:
matching-strategy: ant_path_matcher
redis:
host: localhost
port: 6379
# MyBatis的配置
mybatis:
# mapper.xml文件的位置
mapper-locations: classpath:mapper/*.xml
# 扫描实体类别名
type-aliases-package: com.qf.boot.entity
configuration:
# 开启表中的字段下划线名称转Java属性中的驼峰命令
map-underscore-to-camel-case: true
server:
port: 8081
SpringBoot整合Swagger/knife4j
1、添加依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
2、修改配置文件
spring:
mvc:
pathmatch:
# Springfox使用的路径匹配是基于AntPathMatcher的
# 所以需要配置此参数
matching-strategy: ant_path_matcher
3、Swagger的配置类
package com.han.superparking.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2 // 启动Swagger
public class Knife4jConfig {
@Bean(value = "defaultApi2")
public Docket defaultApi2() {
String groupName = "3.X版本";
return new Docket(DocumentationType.OAS_30)
.apiInfo(new ApiInfoBuilder()
.title("超级停车场")
.description("# 超级停车场所有的接口的入参,出参等等信息")
.termsOfServiceUrl("http://i.heyige.cn")
.contact(new Contact("han", "http://i.heyige.cn", "123123@qq.com"))
.version("3.0")
.build())
// 分组名称
.groupName(groupName)
.select()
// 这里指定Controller扫描包路径
.apis(RequestHandlerSelectors.basePackage("com.han.superparking.controller"))
.paths(PathSelectors.any())
.build();
}
}
4、控制层Controller接口
@Controller
@Api(tags = "测试swagger")
public class HelloController {
@GetMapping("/hi")
@ApiImplicitParam(name = "name",value = "姓名",required = true)
@ApiOperation("测试接口")
public String index(Model model, String name) {
model.addAttribute("name", name);
return "index";
}
}
SpringBoot全局异常处理
package com.han.superparking.config;
import com.han.superparking.common.R;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* 全局异常处理
*
* @author han
* @date 2023/08/09
*/
@RestControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(IllegalArgumentException.class)
public R<String> handlerIllegalArgumentException(Exception e) {
return R.fail(e.getMessage());
}
}
SpringBoot整合返回前端的响应对象
package com.han.superparking.common;
import lombok.Data;
/**
* 统一响应对象
*
* @author han
* @date 2023/08/09
*/
@Data
public class R<T> {
public static final Integer SUCCESS = 200;
public static final Integer FAIL = 0;
private Integer code;
private String msg;
private T data;
private R(Integer code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
// 成功的响应
public static <T> R<T> ok(Integer code, String msg, T data) {
return new R<>(code, msg, data);
}
public static <T> R<T> ok(T data) {
return ok(SUCCESS, "'请求成功'", data);
}
public static <T> R<T> ok() {
return ok(null);
}
// 失败的响应
public static <T> R<T> fail(Integer code, String msg, T data) {
return new R<>(code, msg, data);
}
public static <T> R<T> fail(T data) {
return fail(FAIL, "'请求失败'", data);
}
public static <T> R<T> fail() {
return fail(null);
}
}
Redis的配置类- 修改redis序列化对象时 key-value的序列化方式
存对象时使用
package com.han.superparking.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* Redis的配置类
* 修改redis序列化对象时 key-value的序列化方式
*
* @author han
* @date 2023/08/09
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// 关联redis工厂
redisTemplate.setConnectionFactory(factory);
// 设置key的序列化方式
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(stringRedisSerializer);
return redisTemplate;
}
}
`