spring boot开发中的资源处理等问题

文章目录

一、RESTful 风格

  • 核心特点:将请求参数嵌入 URL 路径中,通过 HTTP 方法(GET/POST/PUT/DELETE 等)表达操作语义,使接口设计更简洁、规范。
  • 参数传递方式 :使用 URL 路径占位符(如 /users/{id})传递参数,而非传统的 ?key=value 形式。
  • 示例
    • 获取 ID 为 1 的用户:GET /users/1(参数 id=1 放在 URL 中)
    • 更新 ID 为 1 的用户:PUT /users/1

二、Spring Boot 静态资源处理

  • 默认存放路径 :项目中 src/main/resources/static/ 目录(或 public/resources/ 目录,优先级:resources > static > public)。
  • 访问规则
    • 静态资源可直接通过 URL 访问,路径为 /资源名(无需包含 static 前缀)。例如 static/image/logo.png 可通过 http://localhost:8080/image/logo.png 访问。
    • 静态资源请求(/static/** 路径模式)会被 Spring Boot 内置的资源处理器直接处理,不会经过 Controller 或 HandlerMapping,避免与业务接口冲突。

三、Spring Boot 首页(欢迎页)

  • 默认规则 :Spring Boot 会自动识别 src/main/resources/static/src/main/resources/public/ 目录下的 index.html 文件作为首页。
  • 访问方式 :直接访问应用根路径(如 http://localhost:8080)即可显示该首页。

四、@PathVariable 注解

  • 作用 :用于从 URL 路径中获取参数,配合 RESTful 风格使用。

  • 示例

    java 复制代码
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        // id 的值从 URL 路径中的 {id} 占位符获取
        return userService.getUserById(id);
    }
  • 注意 :若参数名与路径占位符名称不一致,需指定 value,如 @PathVariable("userId") Long id

五、拦截器(Interceptor)

  • 技术本质 :基于 Spring MVC 的接口回调机制,用于在请求处理的预处理、后处理、完成后三个阶段进行拦截操作(如登录验证、日志记录)。

  • 实现方式

    1. 自定义类实现 HandlerInterceptor 接口,重写 preHandle(预处理)、postHandle(后处理)、afterCompletion(完成后)方法。
    2. 通过 WebMvcConfigurer 配置类的 addInterceptors 方法注册拦截器,并指定拦截/排除的路径。
  • 示例

    java 复制代码
    // 自定义拦截器
    public class LoginInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
            // 预处理逻辑(如验证登录状态)
            return true; // true 放行,false 拦截
        }
    }
    
    // 注册拦截器
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LoginInterceptor())
                    .addPathPatterns("/**") // 拦截所有路径
                    .excludePathPatterns("/login"); // 排除登录路径
        }
    }

六、过滤器(Filter)

  • 技术定位 :Java EE 规范中的 Web 三大组件(Servlet、Filter、Listener)之一,基于 Servlet 容器,在请求进入 Servlet 之前或响应返回客户端之前进行过滤。

  • 与拦截器的区别

    维度 过滤器(Filter) 拦截器(Interceptor)
    技术依赖 依赖 Servlet 容器 依赖 Spring MVC 框架
    拦截范围 所有请求(包括静态资源) 仅拦截 Spring MVC 处理的请求(Controller 方法)
    执行时机 请求进入 Servlet 之前 Controller 方法调用前后
  • 使用场景:字符编码设置、跨域请求处理、敏感词过滤等。

七、触发器(Trigger)

  • 技术定位:数据库层面的机制,当数据库发生指定操作(如 INSERT/UPDATE/DELETE)时,自动触发预设的 SQL 逻辑。
  • 特点
    • 运行在数据库内部,与应用程序解耦。
    • 项目中慎用:迁移数据库时可能因语法差异(如 MySQL 与 Oracle 触发器语法不同)导致兼容性问题,且逻辑隐藏在数据库中,不利于维护。

八、HandlerMapping 组件

  • 作用 :Spring MVC 中用于 映射请求 URL 到具体的 Handler(如 Controller 方法) 的组件,负责解析请求路径并找到对应的处理器。
  • 常见实现类
    1. BeanNameUrlHandlerMapping:根据 Bean 的名称(以 / 开头)映射 URL,如 Bean 名称为 /user,则处理 http://localhost:8080/user 请求。
    2. RequestMappingHandlerMapping(主流):解析 @RequestMapping 及其派生注解(@GetMapping@PostMapping 等),实现 URL 与 Controller 方法的映射,支持复杂的路径匹配和参数绑定。
相关推荐
鱟鲥鳚8 分钟前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
皮皮林55121 分钟前
开源实力派,给本地 AI 装上深度调研能力,一张 3090 跑到 95.7 分!
后端
努力的小雨1 小时前
把 Windows 桌面图标做成一个会自己运转的小世界
后端
武子康1 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
大模型码小白2 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司2 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地3 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
IT_陈寒3 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
段一凡-华北理工大学3 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
码事漫谈4 小时前
1999年的电商前夜和2026年的AI前夜 历史押韵但从不重复
后端