在 Java Web 开发(尤其是基于 Servlet 规范和 Spring Boot 的应用)中,处理 HTTP 请求(Request) 与 响应(Response) 涉及多个核心类。
一、底层:Servlet API(由 Tomcat/Jetty 等容器提供)
这些是 Java EE(现 Jakarta EE)标准的一部分,所有 Java Web 框架(包括 Spring)都构建在其之上。
1.HttpServletRequest
作用:封装客户端发来的 HTTP 请求。
能获取什么:
URL、Method(GET/POST)
Headers(如 Authorization、User-Agent)
Query parameters(?id=123)
Form data(application/x-www-form-urlencoded)
Raw body(通过 getInputStream())
Cookies、Session、客户端 IP 等
典型使用场景:拦截器、过滤器、底层日志、安全审计。
2.HttpServletResponse
作用:用于构造返回给客户端的 HTTP 响应。
能做什么:
设置状态码(setStatus(404))
设置响应头(setHeader("Cache-Control", "no-cache"))
写入响应体(getWriter().write("Hello") 或 getOutputStream())
注意:一旦调用 getWriter() 或 getOutputStream(),响应就“提交”了,不能再改头或状态码。
二、Spring MVC 层:高级封装(推荐日常使用)
Spring 对 Servlet API 做了优雅封装,无需直接操作原始流。
3.@RequestBody / @ResponseBody
虽然不是“类”,但它们是处理请求体和响应体的核心机制。
@RequestBody:将 HTTP 请求体(如 JSON)自动反序列化为 Java 对象。
@ResponseBody:将返回值自动序列化为 HTTP 响应体(如 JSON)。
4.ResponseEntity
作用:Spring 提供的完整 HTTP 响应封装类。
包含:响应体(body)、HTTP 状态码(status)、响应头(headers)。
典型用途:
return ResponseEntity.status(201).header("Location", "/users/1").body(user);
5.RequestEntity
作用:用于发起 HTTP 请求时封装请求(常用于 RestTemplate 或 WebClient)。
包含:请求体、方法、URL、头等。
示例:
RequestEntity<User> request = RequestEntity.post(uri).header("Authorization", "Bearer xxx").body(user);
三、数据载体类(用于传输结构化数据)
6.HttpHeaders
作用:Spring 封装的 HTTP 头容器,类型安全、支持多值头。
常与 ResponseEntity / RequestEntity 配合使用:
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("X-Custom", "value");
7.MultiValueMap<String, String>
作用:表示可包含多个值的 Map(如 ?role=admin&role=user)。
常用于表单数据、查询参数、头字段(某些头允许多值)。
Spring 的 LinkedMultiValueMap 是常用实现。
四、JSON 处理相关
8.ObjectMapper(Jackson)
作用:Spring Boot 默认的 JSON 序列化/反序列化工具。
虽不直接出现在 Controller 方法签名中,但支撑了 @RequestBody / @ResponseBody 的底层转换。
也可手动使用:
JsonNode node = objectMapper.readTree(requestBodyString);
注意:org.json.JSONObject 或 Fastjson.JSONObject 属于第三方库,不是标准请求响应类,仅用于临时 JSON 操作。
五、现代响应式编程(Spring WebFlux)
如果使用响应式栈(非阻塞),则对应类为:
9. ServerHttpRequest / ServerHttpResponse
WebFlux 中对 HTTP 请求/响应的抽象(类似 Servlet 的 HttpServletRequest/Response,但支持响应式流)。
10. Mono<ResponseEntity> / Flux
响应式返回类型,用于异步非阻塞处理。
六、核心类关系图
客户端 HTTP 请求↓
[HttpServletRequest] ←(Servlet 容器创建)↓
Spring MVC 解析 → [@PathVariable, @RequestParam, @RequestBody]↓
Controller 方法处理↓
返回 → [ResponseEntity<T>] 或 直接对象(隐式 @ResponseBody)↓
[HttpServletResponse] ←(Spring 填充后由容器发送)↓
客户端收到 HTTP 响应
七、开发建议
