Spring Boot
Spring Boot Servlet Web 入门:starter 与自动配置、MVC 映射、参数绑定、静态资源和拦截器。
#java
#concept
#growing
#dev
Spring Boot
以下 starter 与静态资源配置以 Spring Boot 3.x 的 Servlet Web 栈为范围;理解框架定位与 MVC/WebFlux 区别见 Spring Web 概览。
web入门
- Spring Boot 3.x 的
spring-boot-starter-web聚合 Spring MVC、JSON 消息转换及默认嵌入式 Tomcat 等依赖;Boot 自动配置根据类路径、配置及已有 bean 装配默认组件。 - Spring MVC 属于 Spring Framework;Boot 简化应用装配。默认服务器可替换,starter 名称和依赖应按所选 Boot 主版本核对。
控制器
- Spring Framework 的
@Controller标识 MVC 控制器,方法可返回视图,也可配合@ResponseBody写响应体。@RestController相当于@Controller+@ResponseBody;它描述响应处理,不是限制客户端只能“请求数据”。
Model 数据 View 页面 Controller 控制器
传统视图响应的简化流程:DispatcherServlet 分派请求到 Controller,Controller 调用用例并填充 Model、返回视图名,视图解析与渲染生成 HTTP 响应。Model 是传给视图的数据,不等同于数据库访问层;REST 响应通常直接经消息转换器输出正文。
路由映射
- @RequestMapping 注解主要负责URL的路由映射。它可以添加在Controller类或具体的方法上。
- 类级映射提供共享条件,方法级映射进一步限定;路径可组合,具体条件如 consumes/produces 存在方法级覆盖规则。
- @RequestMapping参数:
value:请求路径,支持 URI 模板和路径模式;正则用于
{变量:正则},不是把整个 value 当任意正则 method:HTTP请求方法 consumes:请求的媒体类型(Content-Type),如application/json produces:可产生的响应媒体类型,与客户端 Accept 协商 params,headers:请求的参数及请求头的值
参数传递
@RequestParam("name")绑定查询参数或表单参数;省略名称依赖参数名元数据,明确指定名称可避免编译配置差异。它不是读取任意 JSON 字段。@PathVariable绑定路径模板中的变量。@RequestBody通过 HttpMessageConverter 按 Content-Type 等条件读取请求体,如 JSON;不是所有非表单数据都自动支持。表单参数应使用 RequestParam 等绑定方式,输入业务校验需另行配置。
静态资源访问
- 默认可从 classpath 的
/static、/public、/resources、/META-INF/resources等位置提供资源;例如src/main/resources/static/a.css默认映射为/a.css。 - 在 application.properties 中改变 URL 映射及资源位置(这是资源处理配置,不是 Servlet Filter 规则):
spring.mvc.static-path-pattern=/static/**
spring.web.resources.static-locations=classpath:/static/
文件上传
- 表单enctype属性规定发送到服务器之前应该如何对表单数据继续进行编码。
- 当表单的enctype=“multipart/form-data”时,可以使用MultipartFile获取上传的文件数据,再通过
transferTo方法将其写入到磁盘中
拦截器
- Spring MVC 的
HandlerInterceptor提供preHandle、postHandle、afterCompletion,作用于相应 HandlerMapping 的请求处理链。 preHandle可中止处理;postHandle 在 handler 成功处理后执行,afterCompletion 用于完成后的处理。不要假定 postHandle 时响应体仍未提交,REST 消息转换可能已写出。
拦截器注册
- addPathPatterns方法定义拦截的地址
- excludePathPatterns定义排除某些地址不被拦截
- 经 WebMvcConfigurer 注册时,不设置 include 模式通常应用于该 MVC 配置覆盖的所有 handler;没有 exclude 只是没有路径排除,不代表覆盖所有网络请求。
- 拦截器不是 Servlet Filter,也不宜作为完整安全边界;认证授权通常交给 Spring Security 的过滤器链。
RESTful
- 每一个URI代表一种资源
- GET 获取表示;POST 按资源语义处理提交(常用于创建);PUT 在目标 URI 创建或替换表示;DELETE 请求移除目标资源关联。PUT/DELETE 的预期效果具有幂等语义,POST 不天然保证幂等。
- 通过操作资源的表现形式来实现服务端请求操作
- 资源表示可以是 JSON、HTML 或其他协商的媒体类型。
使用 Swagger / OpenAPI 生成文档
原记录尚未包含所用集成库、版本及配置;保留为待补主题,不把 MVC 注解本身当作已完成的文档生成配置。
Related notes
- 框架定位与示例: Spring Web 概览
- 所属 MOC: Java MOC
- 所属 MOC: 后端开发MOC