Java-请求相关重要的类

在 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 响应

七、开发建议

image

posted @ 2025-11-14 15:20  motley  阅读(16)  评论(0)    收藏  举报