response

响应头

1. location :
          重定向操作:通常告知浏览器马上向该地址发送请求,通常和响应码302 一起使用
2. refresh :
          定时刷新操作 , 指定时间后跳转到指定页面
3. content-encoding :
         设置当前数据的压缩格式,告知浏览器以何种压缩格式解压数据
4. content-disposition :
         通知浏览器以何种方式获取数据(直接解析数据(网页,图片文本),或者以附件方式(下载文件))
5. content-type :
         实体头部用于指示资源的MIME类型(MIME类型:用于提示当前文件的媒体类型,例如图片为 : image/png
、音频为:audio/ogg)。

API 介绍

  void setHeader(String name, String value)  用给定名称和值设置响应头
  void sendRedirect(String location) 用类设置重定向

响应状态码

    200 OK 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。

    302 Move temporarily 重定向,请求的资源临时从不同的 URI响应请求。

    304 Not Modified 从缓存中读取数据,不从服务器重新获取数据。

    403 Forbidden 服务器已经理解请求,但是拒绝执行它,一般在权限不够的时候常见。

    404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现。

    405 Method Not Allowed 请求行中指定的请求方法不能被用于请求相应的资源。

    500 Internal Server Error 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。

### 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、付费专栏及课程。

余额充值