自定义响应对象


import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;
import java.util.Optional;


@Data
@AllArgsConstructor
public final class ResponseVo<T> implements Serializable {

    private static final long serialVersionUID = -1472019435018714147L;

    /**
     * 操作成功标识
     *
     * @param data 要返回的数据
     */
    public static <T> ResponseVo<T> success(T data) {
        return new ResponseVo<>(data, true, 0, "操作成功");
    }

    public static <T> ResponseVo<T> success() {
        return new ResponseVo<>(null, true, 0, "操作成功");
    }

    /**
     * 操作失败标识
     *
     * @param code    异常码
     * @param message 异常信息
     */
    public static <T> ResponseVo<T> fail(int code, String message) {
        return new ResponseVo<>(null, false, code, Optional.ofNullable(message).orElse("操作失败"));
    }

    public static <T> ResponseVo<T> fail(String message) {
        return new ResponseVo<>(null, false, null, Optional.ofNullable(message).orElse("操作失败"));
    }

    public static <T> ResponseVo<T> fail() {
        return new ResponseVo<>(null, false, null, "系统繁忙,请稍后再试!");
    }

    @ApiModelProperty(value = "接口返回数据")
    private T data;

    @ApiModelProperty(value = "接口状态")
    private Boolean success;

    @ApiModelProperty(value = "接口错误码")
    private Integer code;

    @ApiModelProperty(value = "接口错误码的提示")
    private String message;

}

 

### ### 在 Java自定义 HTTP 响应头信息 在 Java Web 应用中,可以通过 `HttpServletResponse` 对象设置自定义的 HTTP 响应头信息。开发者可以在控制器方法、过滤器或拦截器中使用 `setHeader`、`addHeader` 或 `setIntHeader` 等方法添加或修改响应头字段。这种方式广泛应用于 RESTful API 的开发中,用于传递认证信息、缓存控制、跨域配置等元数据。 以下是一个在 Spring Boot 控制器中设置自定义响应头的示例: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; @RestController public class CustomHeaderController { @GetMapping("/custom-header") public String addCustomHeader(HttpServletResponse response) { // 设置自定义响应头 response.setHeader("X-Custom-Header", "CustomValue"); response.setIntHeader("X-Response-ID", 12345); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); return "Custom headers have been added to the response."; } } ``` 在上述示例中,`setHeader` 方法用于设置字符串类型的响应头,`setIntHeader` 用于设置整数类型的响应头。这些方法允许开发者灵活地控制客户端和中间代理的行为。 ### ### 在过滤器中设置全局响应头 为了在整个应用中统一设置响应头,可以使用 `Filter` 实现全局的头信息注入。这种方式适用于需要在每个响应中添加特定头信息的场景,例如 CORS 配置、安全策略或自定义追踪 ID。 以下是一个基于 `OncePerRequestFilter` 的响应头设置示例: ```java import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class CustomResponseHeaderFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // 添加自定义响应头 response.setHeader("X-App-Version", "1.0.0"); response.setHeader("X-Request-ID", java.util.UUID.randomUUID().toString()); // 继续执行过滤链 filterChain.doFilter(request, response); } } ``` 该过滤器会在每次请求处理完成后将指定的响应头注入到 HTTP 响应中,从而确保所有接口返回的响应都包含统一的元信息[^1]。 ### ### 响应头设置的注意事项 在设置响应头时,需要注意以下几点: - **头字段名称大小写不敏感**:HTTP 协议规定头字段名称是大小写不敏感的,因此建议统一使用驼峰命名方式(如 `X-Custom-Header`)。 - **避免覆盖标准头字段**:某些头字段(如 `Content-Type`、`Content-Length`)由容器自动管理,手动设置可能会影响响应的正确性。 - **跨域场景需配合 CORS 配置**:若应用需要支持跨域请求,应确保自定义响应头在 `Access-Control-Expose-Headers` 中声明,以便客户端能够读取这些头信息。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值