《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
返回错误信息
message: “”,
}
复制代码
2.2 结果类枚举
public enum ResultCodeEnum {
/*** 通用部分 100 - 599***/
// 成功请求
SUCCESS(200, “successful”),
// 重定向
REDIRECT(301, “redirect”),
// 资源未找到
NOT_FOUND(404, “not found”),
// 服务器错误
SERVER_ERROR(500,“server error”),
/*** 这里可以根据不同模块用不同的区级分开错误码,例如: ***/
// 1000~1999 区间表示用户模块错误
// 2000~2999 区间表示订单模块错误
// 3000~3999 区间表示商品模块错误
// 。。。
;
/**
- 响应状态码
*/
private Integer code;
/**
- 响应信息
*/
private String message;
ResultCodeEnum(Integer code, String msg) {
this.code = code;
this.message = msg;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}
复制代码
code
:响应状态码
一般小伙伴们是在开发的时候需要什么,就添加什么。但是,为了规范,我们应当参考HTTP
请求返回的状态码。
| | code区间 | 类型 | 含义 |
| — | — | — | — |
| 1** | 100-199 | 信息 | 服务器接收到请求,需要请求者继续执行操作 |
| 2** | 200-299 | 成功 | 请求被成功接收并处理 |
| 3** | 300-399 | 重定向 | 需要进一步的操作以完成请求 |
| 4** | 400-499 | 客户端错误 | 请求包含语法错误或无法完成请求 |
| 5** | 500-599 | 服务器错误 | 服务器在处理的时候发生错误 |
常见的HTTP
状态码:
-
200
- 请求成功; -
301
- 资源(网页等)被永久转移到其它URL
; -
404
- 请求的资源(网页等)不存在; -
500
- 内部服务器错误。
message
:错误信息
在发生错误时,如何友好的进行提示?
-
根据
code
给予对应的错误码定位; -
把错误描述记录到
message
中,便于接口调用者更详细的了解错误。
2.3 统一结果类
public class HttpResult implements Serializable {
/**
- 是否响应成功
*/
private Boolean success;
/**
- 响应状态码
*/
private Integer code;
/**
- 响应数据
*/
private T data;
/**
- 错误信息
*/
private String message;
// 构造器开始
/**
- 无参构造器(构造器私有,外部不可以直接创建)
*/
private HttpResult() {
this.code = 200;
this.success = true;
}
/**
-
有参构造器
-
@param obj
*/
private HttpResult(T obj) {
this.code = 200;
this.data = obj;
this.success = true;
}
/**
-
有参构造器
-
@param resultCode
*/
private HttpResult(ResultCodeEnum resultCode) {
this.success = false;
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
}
// 构造器结束
/**
-
通用返回成功(没有返回结果)
-
@param
-
@return
*/
public static HttpResult success(){
return new HttpResult();
}
/**
-
返回成功(有返回结果)
-
@param data
-
@param
-
@return
*/
public static HttpResult success(T data){
return new HttpResult(data);
}
/**
-
通用返回失败
-
@param resultCode
-
@param
-
@return
*/
public static HttpResult failure(ResultCodeEnum resultCode){
return new HttpResult(resultCode);
}
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return “HttpResult{” +
“success=” + success +
“, code=” + code +
“, data=” + data +
“, message='” + message + ‘’’ +
‘}’;
}
}
复制代码
说明:
-
构造器私有,外部不可以直接创建;
-
只可以调用统一返回类的静态方法返回对象;
-
success
是一个Boolean
值,通过这个值,可以直接观察到该次请求是否成功; -
data
表示响应数据,用于请求成功后,返回客户端需要的数据。
三、测试及总结
3.1 简单的接口测试
@RestController
@RequestMapping(“/httpRest”)
@Api(tags = “统一结果测试”)
public class HttpRestController {
@ApiOperation(value = “通用返回成功(没有返回结果)”, httpMethod = “GET”)
@GetMapping(“/success”)
public HttpResult success(){
return HttpResult.success();
}
@ApiOperation(value = “返回成功(有返回结果)”, httpMethod = “GET”)
@GetMapping(“/successWithData”)
public HttpResult successWithData(){
return HttpResult.success(“风尘博客”);
}
@ApiOperation(value = “通用返回失败”, httpMethod = “GET”)
@GetMapping(“/failure”)
public HttpResult failure(){
return HttpResult.failure(ResultCodeEnum.NOT_FOUND);
}
}
复制代码
这里
Swagger
以及SpringMVC
的配置就没贴出来了,详见Github 示例代码。
3.2 返回结果
http://localhost:8080/swagger-ui.html#/
{
“code”: 200,
“success”: true
}
复制代码
{
“code”: 200,
“data”: “风尘博客”,
“success”: true
}
复制代码
{
“code”: 404,
“message”: “not found”,
“success”: false
}
复制代码
四、全局异常处理
使用统一返回结果时,还有一种情况,就是程序的报错是由于运行时异常导致的结果,有些异常是我们在业务中抛出的,有些是无法提前预知。
因此,我们需要定义一个统一的全局异常,在Controller
捕获所有异常,并且做适当处理,并作为一种结果返回。
4.1 设计思路:
-
自定一个异常类(如:
TokenVerificationException
),捕获针对项目或业务的异常; -
使用
@ExceptionHandler
注解捕获自定义异常和通用异常; -
使用
@ControllerAdvice
集成@ExceptionHandler
的方法到一个类中; -
异常的对象信息补充到统一结果枚举中;
4.2 自定义异常
public class TokenVerificationException extends RuntimeException {
/**
- 错误码
*/
protected Integer code;
protected String msg;
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
/**
-
有参构造器,返回码在枚举类中,这里可以指定错误信息
-
@param msg
*/
public TokenVerificationException(String msg) {
super(msg);
}
总结
一般像这样的大企业都有好几轮面试,所以自己一定要花点时间去收集整理一下公司的背景,公司的企业文化,俗话说「知己知彼百战不殆」,不要盲目的去面试,还有很多人关心怎么去跟HR谈薪资。
这边给大家一个建议,如果你的理想薪资是30K,你完全可以跟HR谈33~35K,而不是一下子就把自己的底牌暴露了出来,不过肯定不能说的这么直接,比如原来你的公司是25K,你可以跟HR讲原来的薪资是多少,你们这边能给到我的是多少?你说我这边希望可以有一个20%涨薪。
最后再说几句关于招聘平台的,总之,简历投递给公司之前,请确认下这家公司到底咋样,先去百度了解下,别被坑了,每个平台都有一些居心不良的广告党等着你上钩,千万别上当!!!
Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
总结
一般像这样的大企业都有好几轮面试,所以自己一定要花点时间去收集整理一下公司的背景,公司的企业文化,俗话说「知己知彼百战不殆」,不要盲目的去面试,还有很多人关心怎么去跟HR谈薪资。
这边给大家一个建议,如果你的理想薪资是30K,你完全可以跟HR谈33~35K,而不是一下子就把自己的底牌暴露了出来,不过肯定不能说的这么直接,比如原来你的公司是25K,你可以跟HR讲原来的薪资是多少,你们这边能给到我的是多少?你说我这边希望可以有一个20%涨薪。
最后再说几句关于招聘平台的,总之,简历投递给公司之前,请确认下这家公司到底咋样,先去百度了解下,别被坑了,每个平台都有一些居心不良的广告党等着你上钩,千万别上当!!!
Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书。
[外链图片转存中…(img-W5TQDPBS-1714742789925)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!