【Java】Response约定

老姜博客了解更多:Response约定

1 Response定义

推荐使用如下格式:

package cn.com.bestpay;

public class Response<T> implements Serializable{
    private Boolean success;
    private String errorCode;
    private String errorMsg;
    private T body;

    // 原错误码
    private String primaryErrorCode;

    // 原错误信息
    private String primaryErrorMsg;

    // 错误ip
    private String primaryErrorIp;
}

2 Response设值规范

2.1 success

success = true: 业务正常受理成功

success = false: 业务受理失败情况,包括如下场景:业务数据异常(脏数据等)、配置异常、执行异常、网络异常、数据库异常,中间件异常以及外部异常等等.

2.2 errorCode

success=false时设置,errorCode由各应用自己定义当前错误分配的错误码.

建议各系统定义唯一的BusiEnum枚举进行统一维护,示例代码:

import lombok.Getter;

public enum BusiError {
    REQUEST_ARGS_INVALID("00001", "请求参数无效,请重新确认后重试"),
    SYSTEM_CONFIG_WRONG("00002", "系统配置错误"),
    INNER_ERROR("10000", "系统内部错误"),
    RISK_ENGINE_EXECUTE_ERROR("10001", "风控决策引擎执行错误"),

    @Getter
    private String errorCode;

    @Getter
    private String errorMsg;

    BusiError(String errorCode,String errorMsg){
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }
}

2.3 errorMsg

success=false时设置,同errorCode,各应用自己定义当前错误码应该提示的错误描述

2.4 primaryError*

这块大家要注意:primaryErrorCode、primaryErrorMsg, primaryErrorIp这三个的使用场景和目的.

场景:分布式微服务应用下,一个应用请求往往整个链路经过多个系统,任何环节都会出现问题,为了快速暴露出现问题的节点,设置以上三个字段用来向上传递最根源的问题.

目的:快速定位请求调用链路哪个环节出现问题

示例:

A —> B —> C —> D(发生异常)

说明:A应用是面向客户的接口,整个请求调用链上经过B、C、D应用,在D应用发生验证异常了,导致请求无法处理,报错给前端,那错误码设置流程为:

D:该应用是问题发生的最初的位置,所以对于D应用

primaryErrorCode = errorCode(D应用当前错误对外约定的错误码)
primaryErrorMsg  = errorMsg(D应用当前错误对外约定的错误信息)
primaryErrorIp   = IPUtil.getServerIp()

C: C应用拿到D应用的错误信息返回值后,根据自己的业务规则,设置当前异常情况下Response的errorCode, errorMsg.
但是此时 primaryErrorCode、primaryErrorMsg、primaryErrorIp的值是D的Response里面的取值

B, A: 同 C的处理一致

3 Response处理规范

调用外部服务时,对Response的处理流程如下:

Response<XXXDTO> response = yyyFacade.xxApi(request);
if (response.isSuccess()) {
    // 请求受理成功
    XXXDTO data = response.getBody();
    //需检查body内容是否为null,避免空指针
    if (data == null) {
        
    } else {

    }
} else {
    //请求失败处理
}

了解更多
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java Web编程中,`response` 对象是一个封装了HTTP响应的对象,它提供了一些方法来设置HTTP响应的属性和内容,以及向客户端发送HTTP响应。 下面是一些常用的 `response` 方法: - `setContentType(String type)`:设置响应的MIME类型。 - `setCharacterEncoding(String charset)`:设置响应的字符编码。 - `setStatus(int sc)`:设置响应的HTTP状态码。 - `setHeader(String name, String value)`:设置响应头中某个字段的值。 - `addCookie(Cookie cookie)`:添加一个Cookie到响应中。 - `getWriter()`:获取一个用于写文本响应的 `PrintWriter` 对象。 - `getOutputStream()`:获取一个用于写二进制响应的 `ServletOutputStream` 对象。 - `sendRedirect(String location)`:将客户端重定向到另一个URL。 下面是一个简单的示例,演示如何使用 `response` 对象向客户端发送一个简单的HTTP响应: ```java response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><body>Hello World!</body></html>"); ``` 在这个示例中,我们设置了响应的MIME类型和字符编码,获取了一个用于写文本响应的 `PrintWriter` 对象,并向客户端发送了一个简单的HTML响应。 当你调用 `response.getWriter()` 或 `response.getOutputStream()` 方法时,Servlet容器会自动创建一个输出流,并将所有写入该流的内容发送给客户端。在使用完输出流之后,你需要手动关闭它,以确保所有内容都被正确地发送给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值