Response

A Response is the Catalina-internal facade for a ServletResponse that is to be produced, based on the processing of a corresponding Request.
### Spring Boot Response 使用方法 在 Spring Boot 应用程序中,`ResponseEntity<T>` 是一种常用的方式来自定义 HTTP 响应的状态码、头信息以及主体内容。这使得开发者能够灵活控制返回给客户端的信息。 对于简单的场景,可以直接从控制器方法返回 `String`, `void` 或者 POJO 对象。当返回这些类型的对象时,Spring MVC 会自动将其转换成 JSON 或 XML 形式的响应体[^2]。 然而,在更复杂的情况下,比如需要修改默认的行为或是添加额外的头部字段,则应该考虑使用 `HttpServletResponse` 参数或者封装到 `ResponseEntity<?>` 中去实现。下面是一个利用 `ResponseEntity<String>` 来构建自定义响应的例子: ```java @GetMapping("/custom-response") public ResponseEntity<String> customResponse() { HttpHeaders headers = new HttpHeaders(); headers.add("Custom-Header", "HeaderValue"); String body = "{ \"message\": \"This is a custom message\" }"; return new ResponseEntity<>(body, headers, HttpStatus.OK); } ``` 另外,为了满足某些特殊需求,可能还需要对原始的 `HttpServletResponse` 进行扩展或替换。由于直接操作 `HttpServletResponse` 的输出流存在局限性——即无法读取已经写出的数据——因此可以通过创建一个装饰器模式下的包装类来解决这个问题[^4]。 #### 自定义 HttpServletResponseWrapper 示例 通过继承 `HttpServletResponseWrapper` 类并覆盖相应的方法,可以在不改变原有接口的前提下增强功能。这里展示了一个简单版本的实现方式: ```java import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; // 定义一个新的 Wrapper 类 class CustomHttpResponse extends HttpServletResponseWrapper { private final ByteArrayOutputStream capture = new ByteArrayOutputStream(); public CustomHttpResponse(HttpServletResponse response) throws IOException { super(response); } @Override public OutputStream getOutputStream() throws IOException { return this.capture; // 替换原有的输出流为内存中的字节数组 } // 可以在此处添加更多逻辑... } // 控制器内调用此包装后的响应对象 @PostMapping("/wrap-response") @ResponseBody public void wrapResponse(HttpServletRequest request, HttpServletResponse response) throws Exception { try (var wrappedResp = new CustomHttpResponse(response)) { // 执行业务逻辑并将结果写入wrappedResp byte[] outputBytes = wrappedResp.getCapture().toByteArray(); // 获取最终要发送出去的内容 // 将捕获的数据重新设置回原responseresponse.getOutputStream().write(outputBytes); response.flushBuffer(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值