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 方法的映射,支持复杂的路径匹配和参数绑定。
相关推荐
拾忆,想起12 分钟前
Redis发布订阅:实时消息系统的极简解决方案
java·开发语言·数据库·redis·后端·缓存·性能优化
艾莉丝努力练剑24 分钟前
【C语言16天强化训练】从基础入门到进阶:Day 14
java·c语言·学习·算法
BioRunYiXue33 分钟前
FRET、PLA、Co-IP和GST pull-down有何区别? 应该如何选择?
java·服务器·网络·人工智能·网络协议·tcp/ip·eclipse
SimonKing41 分钟前
想搭建知识库?Dify、MaxKB、Pandawiki 到底哪家强?
java·后端·程序员
程序员清风1 小时前
为什么Tomcat可以把线程数设置为200,而不是2N?
java·后端·面试
用户0332126663671 小时前
掌控演示文稿视觉:Java 如何为 PowerPoint 设置背景
java
布朗克1681 小时前
OpenTelemetry 在 Spring Boot 项目中的3种集成方式
java·开发语言·opentelemetry
拾荒的小海螺1 小时前
JAVA:Nginx 事件驱动模型的技术指南
java·网络·nginx
MrSYJ1 小时前
nimbus-jose-jwt你都会吗?
java·后端·微服务