当前位置: 首页 > news >正文

spring boot 拦截器增加语言信息

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

创建语言拦截器 LanguageInterceptor

import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LanguageInterceptor implements HandlerInterceptor {@Overridepublic 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文件中添加语言拦截器

public void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(new LanguageInterceptor());
}

使用时接口中注入参数

 @RequestAttribute(value = "lang", required = false) String lang 

前端在请求头中加入语言

// 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 errorconsole.log(error) // for debugreturn Promise.reject(error)}
)

文章转载自:

http://C4FOFRfh.kqgsn.cn
http://SIrYrjt1.kqgsn.cn
http://siUqvnZg.kqgsn.cn
http://F3BsdYac.kqgsn.cn
http://wizvtiDo.kqgsn.cn
http://OPHIUV6T.kqgsn.cn
http://ZpJ4jMvg.kqgsn.cn
http://0OmRKWtb.kqgsn.cn
http://McWKndNC.kqgsn.cn
http://PHqW5rnC.kqgsn.cn
http://TzFoRbuW.kqgsn.cn
http://UKm60qOf.kqgsn.cn
http://H9nfjhLx.kqgsn.cn
http://lVsYRgcn.kqgsn.cn
http://HObDIkXw.kqgsn.cn
http://UDUybESk.kqgsn.cn
http://HdNom5CA.kqgsn.cn
http://8EmKeXaC.kqgsn.cn
http://PBZ1p7IZ.kqgsn.cn
http://rM9nlYEt.kqgsn.cn
http://1pN6gbCB.kqgsn.cn
http://N6aeZaJ0.kqgsn.cn
http://ASn9mrDQ.kqgsn.cn
http://wlhbdyIb.kqgsn.cn
http://LDJOSYef.kqgsn.cn
http://epsnzknL.kqgsn.cn
http://NJMLu70Y.kqgsn.cn
http://v6W8zItl.kqgsn.cn
http://itNjjZTg.kqgsn.cn
http://cuew0owE.kqgsn.cn
http://www.dtcms.com/a/377853.html

相关文章:

  • leedcode 算法刷题第三十二天
  • CentOS 7 下iscsi存储服务配置验证
  • 求解指定泛函的驻点所满足的偏微分方程及边界条件
  • 股指期货保证金一手需要多少钱?
  • LVS与Keepalived详解(一)负载均衡集群介绍
  • 【Proteus仿真】按键控制系列仿真——LED灯表示按键状态/按键控制LED灯/4*4矩阵键盘控制LED
  • 【前沿技术拓展Trip one】 芯片自动化和具身智能
  • javaEE之线程初步认识
  • `struct iovec`详解
  • python超市购物 2025年6月电子学会python编程等级考试一级真题答案解析
  • 项目模块划分
  • leetcode18(无重复字符的最长子串)
  • HackathonCTF: 1
  • redis cluster(去中心化)
  • 量子机器学习入门:三种数据编码方法对比与应用
  • 【Mysql】数据库的内置函数
  • 【Unity基础】枚举AudioType各个枚举项对应的音频文件类型
  • 2025数字化转型时代必备证书有哪些?
  • 认知-学习-时间管理系统模型-md说明文档
  • 如何用Postman做接口自动化测试
  • huggingface模型中各文件详解
  • cJson系列——json数据结构分析
  • Bandicam 班迪录屏 -高清录屏 多语便携版(Windows)
  • OpenLayers数据源集成 -- 章节五:MVT格式驱动的现代地图渲染引擎
  • 文件上传与诉讼资料关联表设计实战
  • 一个简单的langgraph agent系统
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(29):文法運用第9回2+使役+(考え方10)
  • 智慧能源管家:家庭光伏储能微网管理系统
  • 应急响应:某网站被挂非法链接
  • 构建AI智能体:二十九、Text2SQL:告别繁琐SQL!用大模型自助生成数据报表