一、绪论
http web系统接口返回状态码有很多中,包括行业内定的状态码 ,比如200 表示成功,500表示服务器系统不可用,但是有包含很多业务上自定义的状态码。比如阿里,腾讯这些公司的产品会定义很多自己公司产品的状态码,外人一般只能看到状态码,不知道状态码的内容。这是就是需要对状态码进行管理,就如同字段,通过状态码查找状态码的信息。
二、http返回状态码和表示的内容
HTTP(超文本传输协议)是一种用于在客户端和服务器之间传输数据的协议。在HTTP通信过程中,服务器会返回一个状态码,用于表示请求的处理结果。这个状态码由三位数字组成,每个状态码都有特定的含义。下面是常见的HTTP返回状态码:
1. 1xx(信息性状态码):表示接收的请求正在处理。
100(继续):服务器已经接收到请求的头部,并且客户端应该继续发送请求的剩余部分。
101(切换协议):服务器要求切换协议,例如从HTTP协议切换到WebSocket协议。
2. 2xx(成功状态码):表示请求已成功处理。
200(成功):请求已成功处理,并返回所请求的数据。
201(已创建):请求成功,并且服务器创建了一个新的资源。
204(无内容):请求成功处理,但没有返回任何内容。
3. 3xx(重定向状态码):表示需要进一步操作才能完成请求。
301(永久重定向):请求的资源已永久移动到新的URL。
302(临时重定向):请求的资源暂时移动到新的URL。
304(未修改):客户端发送了一个条件请求,服务器返回未修改的状态,表示客户端缓存的副本仍有效。
4. 4xx(客户端错误状态码):表示客户端发生了错误。
400(错误请求):服务器无法理解客户端发送的请求。
401(未授权):请求需要用户身份验证。
403(禁止):服务器拒绝了客户端的请求。
404(未找到):请求的资源不存在。
5. 5xx(服务器错误状态码):表示服务器发生了错误。
500(服务器内部错误):服务器发生了未知的内部错误。
502(错误网关):服务器作为网关或代理,从上游服务器接收到无效的响应。
503(服务不可用):服务器暂时无法处理请求,通常是由于过载或维护。
除了上述常见的HTTP状态码,还有一些其他状态码,如206(部分内容)、301(永久重定向)、401(未授权)、403(禁止)、408(请求超时)、429(太多请求)等,每个状态码都有其特定的含义和用途。
在Web开发中,了解HTTP状态码对于调试和排查问题非常重要。通过观察返回的状态码,我们可以了解请求是否成功、是否需要重定向、是否有权限访问资源等信息,从而根据不同的状态码采取相应的处理措施。
三、可以通过枚举类型管理状态码
例如:
public enum ResponseCode {
/* 公共状态码 */
SUCCESS(200, "成功"),
FAILED(400, "失败"),
UNAUTHORIZED(401, "签名错误"),
NOT_FOUND(404, "此接口不存在"),
INTERNAL_SERVER_ERROR(500, "系统繁忙,请稍后再试"),
/* 参数错误:10001-19999 */
PARAM_IS_INVALID(10001, "参数无效"),
PARAM_IS_BLANK(10002, "参数为空"),
PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),
PARAM_NOT_COMPLETE(10004, "参数缺失"),
/* 用户错误:20001-29999*/
USER_NOT_LOGGED_IN(20001, "用户未登录"),
USER_LOGIN_ERROR(20002, "账号不存在或密码错误"),
USER_ACCOUNT_FORBIDDEN(20003, "账号已被禁用"),
USER_NOT_EXIST(20004, "用户不存在"),
USER_HAS_EXISTED(20005, "用户已存在"),
LOGIN_CREDENTIAL_EXISTED(20006, "凭证已存在"),
//微信授权 错误码
WEIXIN_ENCRYPT_ERROR(30001,"企业微信授权解密失败"),
/*权限相关:40001-49999 */
NO_PERMISS(40001,"无权限访问"),
IS_LIMIT_ACC(40002,"访问过于频繁限制访问"),
/* 业务错误:50001-59999 */
WX_QRCODE_NULL(50001,"微信二维码获取内容不可用"),
/* 业务错误:60001-69999 */
XSS_CODE_ERROR(60001,"存在xss 恶意攻击脚本");
private Integer code;
private String message;
ResponseCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
使用:
public static <T> ResponseData<T> error(ResponseCode code, T data) {
return error(code.getCode(), code.getMessage(), data);
}
public static <T> ResponseData<T> error(ResponseCode code, T data) {
return error(code.getCode(), code.getMessage(), data);
}