【JavaEE】SpringBoot 统一功能处理
目录
- 一、拦截器
- 1.1 使用
- 1.1 定义拦截器
- 1.2 注册配置拦截器
- 1.2 拦截器详解
- 1.2.1 拦截路径
- 1.2.2 拦截器执⾏流程
- 1.3 适配器模式
- 二、统一数据返回格式

一、拦截器
拦截器:拦截器是Spring框架提供的核⼼功能之⼀,主要⽤来拦截⽤⼾的请求,在指定⽅法前后,根据业务需要执
⾏预先设定的代码。
1.1 使用
拦截器的使用步骤有两步:
- 定义拦截器
- 注册配置拦截器
1.1 定义拦截器
⾃定义拦截器:需要实现HandlerInterceptor接⼝,并重写其所有⽅法。
- preHandle()⽅法:⽬标⽅法执⾏前执⾏. 返回true:继续执⾏后续操作;返回false:中断后续操作。
- postHandle()⽅法:⽬标⽅法执⾏后执⾏
- afterCompletion()⽅法:视图渲染完毕后执⾏,最后执⾏(前后端分离后,后端开发现在⼏乎不涉及视图)
package com.example.library.interceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("目标方法执行前 preHandle····");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("目标方法执行后 postHandle····");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.info("渲染后 afterHandle····");
}
}
1.2 注册配置拦截器
实现WebMvcConfigurer接⼝,并重写addInterceptors⽅法
package com.example.library.config;
import com.example.library.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**");
}
}
1.2 拦截器详解
1.2.1 拦截路径
在注册配置拦截器的时候,可以使用InterceptorRegistry类下的addPathPatterns方法添加需要拦截的路径,使用excludePathPatterns方法添加不需要拦截的路径。
那么路径的格式就如下表:
拦截路径 | 含义 | 举例 |
---|---|---|
/* | ⼀级路径 | 能匹配 /book 不能匹配/book/bookList |
/** | 任意级路径 | 能匹配 /book ,/book/bookList···· |
/book/* | book路径下的一级路径 | 能匹配/book/bookList,不能匹配/book/bookList/books |
/book/** | /book下的任意级路径 | 能匹配/book/bookList,/book/bookList/books |
1.2.2 拦截器执⾏流程
执行流程就是,在我们拦截器中拦截的路径的controller层执行前,先调用preHandle方法,在执行完controller层后调用afterHandle方法
1.3 适配器模式
适配器模式:相当于插头转换器,将⼀个类的接⼝,转换成客⼾期望的另⼀个接⼝,把两个不兼容的接⼝通过⼀定的⽅式使之兼容。
适配器模式可以看作⼀种"补偿模式",⽤来补救设计上的缺陷.应⽤这种模式算是"⽆奈之举",如果在设计初期,我们就能协调规避接⼝不兼容的问题,就不需要使⽤适配器模式了。
适配器模式⻆⾊
- Target:⽬标接⼝(可以是抽象类或接⼝),客⼾希望直接⽤的接⼝。
- Adaptee:适配者,但是与Target不兼容。
- Adapter:适配器类,此模式的核⼼。通过继承或者引⽤适配者的对象,把适配者转为⽬标接⼝。
- client:需要使⽤适配器的对象。
例子:
/**
* slf4j接⼝
*/
public interface slf4jApi {
void log(String log);
}
/**
* log4j 接⼝
*/
public class Log4jApi {
public void print(String p) {
System.out.println("Log4jApi"+p);
}
}
/**
* slf4j和log4j适配器
*/
public class Slf4jLog4JAdapter implements slf4jApi {
private Log4jApi log4jApi;
public Slf4jLog4JAdapter(Log4jApi log4jApi) {
this.log4jApi = log4jApi;
}
@Override
public void log(String log) {
System.out.println("slf4jApi"+log);
}
}
/**
* 客⼾端调⽤
*/
public class Slf4jClient {
public static void main(String[] args) {
slf4jApi slf4jApi = new Slf4jLog4JAdapter(new Log4jApi());
slf4jApi.log("slf4jApi日志");
}
}
上面的例子下,我们不需要改变log4j的api,只需要通过适配器转换下,就可以更换⽇志框架,使用slf4j,保障系统的平稳运⾏。