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

获取用户详情ThreadLocal 更新用户头像 当没有实体类接收json参数时使用Map来接收 实体类转换成JSON是指定日期格式

一、ThreadLocal

用于提供线程局部变量
ThreadLocal会为每个线程创建独立空间。

1.基本使用

public class ThreadLocalTest { @Test public void testThreadLocal(){ //提供一个ThreadLocal对象 ThreadLocal tl = new ThreadLocal(); new Thread(()->{ tl.set("晓燕"); System.out.println(Thread.currentThread().getName()+tl.get()); System.out.println(Thread.currentThread().getName()+tl.get()); System.out.println(Thread.currentThread().getName()+tl.get()); }, "蓝色").start(); new Thread(()->{ tl.set("yaochen"); System.out.println(Thread.currentThread().getName()+tl.get()); System.out.println(Thread.currentThread().getName()+tl.get()); System.out.println(Thread.currentThread().getName()+tl.get()); },"绿色").start(); } }

2.实战

我们实际开发中可以定义一个工具类,定义一个全局唯一的ThreadLocal;

public class ThreadLocalUtil { //提供ThreadLocal对象, private static final ThreadLocal THREAD_LOCAL = new ThreadLocal(); //根据键获取值 public static <T> T get(){ return (T) THREAD_LOCAL.get(); } //存储键值对 public static void set(Object value){ THREAD_LOCAL.set(value); } //清除ThreadLocal 防止内存泄漏 public static void remove(){ THREAD_LOCAL.remove(); } }

SpringMVC中一次请求,一个线程。因为tomcat维护一个线程池,你发起一次请求,给你分一个线程。

我们可以在解析令牌的时候顺手将信息存入ThreadLocal这样就不用到处拿着JWT令牌解析了

@Component public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception{ String token = request.getHeader("Authorization"); try{ Map<String, Object> claims = JwtUtils.parseToken(token); //将用户名存储到ThreadLocal中 ThreadLocalUtil.set(claims); return true; }catch(Exception e){ response.setStatus(401); return false; } } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { ThreadLocalUtil.remove(); } }
@GetMapping("/userInfo") public Result<User> userInfo(/*@RequestHeader("Authorization") String token*/){ //Map<String, Object> map = JwtUtils.parseToken(token); //String username = (String) map.get("username"); //从ThreadLocal中获取用户名 Map<String, Object> claims = ThreadLocalUtil.get(); String username = (String) claims.get("username"); User user = userService.findByUserName(username); return Result.success(user); }

二、更新头像

1.思路

获取头像url,更新url

三、Map接收json数据

有的时候我们没有用实体类封装请求参数,就可以使用map临时封装。
只需要在参数前加个@RequestBody即可

四、实体类转换成JSON是指定日期格式

在实体类中的日期属性上加上@JsonFormat注解即可。(由Spring继承的Jackson提供)
发生时机:
当将java类转换成JSON时,会进行这个格式化,所以返回给前端的数据是格式化的。反序列化回对象后还是原本的格式

@Data @AllArgsConstructor @NoArgsConstructor public class Category implements Serializable { private Integer id;//主键ID @NotEmpty private String categoryName;//分类名称 @NotEmpty private String categoryAlias;//分类别名 private Integer createUser;//创建人ID @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime;//创建时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime;//更新时间 }

http://www.jsqmd.com/news/517917/

相关文章:

  • Nginx双栈配置实战:如何让同一台服务器同时支持IPv4和IPv6访问(附完整测试流程)
  • 论文省心了!10个降AIGC软件全场景通用测评,哪个最能帮你降AI率?
  • 2026年京津冀地区能提供一体化定制服务的全屋定制品牌推荐排名Top10 - 工业品网
  • 生产环境必备:使用Tigera Operator高效管理Calico网络配置
  • 内容模型
  • 从零到一:在Windows上搭建CodeBlocks-25.03与MinGW开发环境
  • Pixel Dimension Fissioner多场景落地:在线教育课件智能重述
  • Java中实现对象字段的多版本正则校验策略
  • 深度学习实战:Jetson Nano Ubuntu18.04镜像烧录避坑指南
  • 山东瑞派职业培训学校联系方式:关于这所官方合作背景职业技能培训机构的就读指南与行业选择建议 - 品牌推荐
  • 强烈安利! 更贴合论文写作全流程的降AI率网站 千笔·专业降AI率智能体 VS WPS AI
  • 探讨2026年靠谱的摩利品牌商,如何选择合适的水杯生产商 - 工业品牌热点
  • 在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(2)
  • Dify大模型应用开发平台实战:从Prompt工程到生产级AI工作流
  • 2026年内衬不锈钢钢管厂家哪家好,众信管业性价比值得探讨 - 工业推荐榜
  • Carla仿真中PyQt5与OpenCV版本冲突?手把手教你解决QObject::moveToThread报错
  • Pycharm代码复制到Word乱码?3种快速修复方法(附图文步骤)
  • 模型蒸馏避坑指南:用Gemma2方案教你训练效果翻倍的小模型
  • 【C语言形式化验证实战指南】:20年专家亲授3大工业级案例与5步验证落地法
  • 图像引导自适应光学入门:没有波前传感器,如何用SPGD算法校正模糊图像?
  • 真心不骗你!碾压级的降AI率网站 —— 千笔·降AIGC助手
  • 探讨长江探索船票适用人群,长江探索观光船票在哪个平台买票 - 工业设备
  • 真心不骗你 10个降AIGC平台测评:开源免费如何帮你降AI率?
  • AI建站避坑指南:10个高频问题与客观解答,帮你做出明智决策
  • C# Avalonia 20 - WindowsMenu- ModernWindow
  • 【GIS开发】从WKT到PostGIS:空间数据格式解析、存储与可视化实战
  • 聊聊水草种植生产商家选择,全国范围内哪家口碑好、价格合理 - myqiye
  • Arduino控制VESC电机控制器的通信协议与库开发
  • 2026年对焊弯头市场口碑解析,这些供应商值得信赖,行业内对焊弯头优质企业盘点及核心优势详细解读 - 品牌推荐师
  • VSCode远程开发踩坑实录:解决Failed to parse remote port错误的3种方法