spring boot 拦截器增加语言信息

系统需要识别当前语言。没有在系统中找到现有实现,自己加了一个。

创建语言拦截器 LanguageInterceptor

java 复制代码
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LanguageInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) {
        // 获取语言标识(优先级:参数 > 请求头 > 默认值)
        String lang = request.getParameter("lang");  // 从URL参数获取
        if (lang == null) {
            lang = request.getHeader("Accept-Language");  // 从请求头获取
        }
        if (lang == null || lang.isEmpty()) {
            lang = "zh_CN";  // 设置默认语言
        }

        // 将语言信息存储到request属性中
        request.setAttribute("lang", lang);
        return true;
    }
}

在系统的Configuration文件中添加语言拦截器

java 复制代码
public void addInterceptors(InterceptorRegistry registry){
    registry.addInterceptor(new LanguageInterceptor());
}

使用时接口中注入参数

java 复制代码
 @RequestAttribute(value = "lang", required = false) String lang 

前端在请求头中加入语言

ts 复制代码
// request拦截器
service.interceptors.request.use(
    // 设置语言
    // 添加 Accept-Language 请求头
    config.headers['Accept-Language'] = getLang()
    const method = config.method?.toUpperCase()
    // 防止 GET 请求缓存
    if (method === 'GET') {
      config.headers['Cache-Control'] = 'no-cache'
      config.headers['Pragma'] = 'no-cache'
    }
    // 自定义参数序列化函数
    else if (method === 'POST') {
      const contentType = config.headers['Content-Type'] || config.headers['content-type']
      if (contentType === 'application/x-www-form-urlencoded') {
        if (config.data && typeof config.data !== 'string') {
          config.data = qs.stringify(config.data)
        }
      }
    }
    return config
  },
  (error: AxiosError) => {
    // Do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)
相关推荐
聪明的笨猪猪1 分钟前
Java “并发工具类”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
whltaoin10 分钟前
Spring Boot 常用注解分类整理(含用法示例)
java·spring boot·后端·注解·开发技巧
唐叔在学习17 分钟前
【Git神技】三步搞定指定分支克隆,团队协作效率翻倍!
git·后端
咸菜一世22 分钟前
Scala的while语句循环
后端
嚴寒30 分钟前
Halo 博客系统部署配置
后端
稚辉君.MCA_P8_Java1 小时前
Git 基础 - 查看提交历史
spring boot·git·微服务·云原生·kubernetes
卷Java1 小时前
用户权限控制功能实现说明
java·服务器·开发语言·数据库·servlet·微信小程序·uni-app
从零开始学习人工智能1 小时前
Spring Security 实战:彻底解决 CORS 跨域凭据问题与 WebSocket 连接失败
java·websocket·spring
winrisef1 小时前
删除无限递归文件夹
java·ide·python·pycharm·系统安全
悦悦子a啊1 小时前
Java面向对象练习:Person类继承与排序
java·开发语言·python