第一步:定义枚举,管理响应码和相应消息
package com.haoqian.log_demo.utils.result;
public enum ResultCodeEnum {
/**
* 成功:200
*/
SUCCESS(200, "成功"),
/**
* 参数错误:1001-1999
*/
PARAM_IS_INVALID(1001, "参数无效"),
PARAM_IS_NULL(1002, "参数为空"),
PARAM_TYPE_BIND_ERROR(1003, "参数类型错误"),
PARAM_NOT_COMPLETE(1004, "参数缺失"),
/**
* 用户错误:2001-2999
*/
USER_NOT_LOGIN_IN(2001, "用户未登录,访问的路径需要验证,请登录"),
USER_LOGIN_ERROR(2002, "账号不存在或密码错误"),
USER_ACCOUNT_FORBIDDEN(2003, "账号被禁用"),
USER_NOT_EXIST(2004, "用户不存在"),
USER_HAS_EXISTED(2005, "用户已存在");
private final Integer code;
private final String message;
ResultCodeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}
第二步:编写封装响应结果的类
package com.haoqian.log_demo.utils.result;
import lombok.Data;
import java.io.Serializable;
/**
* 封装请求的响应结果的类
* <p>
* 注解版的进阶做法见下文
* https://mp.weixin.qq.com/s/EW-vo8ERQLAVc3D8YwTr6w
*/
@Data
public class Result implements Serializable {
private Integer code;
private String message;
private Object data;
public void setResultCodeAndMessage(ResultCodeEnum resultCodeEnum) {
this.code = resultCodeEnum.getCode();
this.message = resultCodeEnum.getMessage();
}
// =============================================== 构造的方式 ===============================================
/**
* 返回不带数据的成功
*
* @return
*/
public static Result success() {
Result result = new Result();
result.setResultCodeAndMessage(ResultCodeEnum.SUCCESS);
return result;
}
/**
* 返回带数据的成功
*
* @return
*/
public static Result success(Object data) {
Result result = new Result();
result.setResultCodeAndMessage(ResultCodeEnum.SUCCESS);
result.setData(data);
return result;
}
/**
* 返回不带数据的失败
*
* @return
*/
public static Result failure(ResultCodeEnum resultCodeEnum) {
Result result = new Result();
result.setResultCodeAndMessage(resultCodeEnum);
return result;
}
/**
* 返回带数据的失败
*
* @return
*/
public static Result failure(ResultCodeEnum resultCodeEnum, Object data) {
Result result = new Result();
result.setResultCodeAndMessage(resultCodeEnum);
result.setData(data);
return result;
}
// =============================================== 追加的方式 ===============================================
/**
* 添加响应编号
*
* @return
*/
public static Result code(Integer code) {
Result result = new Result();
result.setCode(code);
return result;
}
/**
* 追加响应消息
*
* @return
*/
public Result message(String message) {
this.message = message;
return this;
}
/**
* 追加响应数据
*
* @return
*/
public Result data(Object data) {
this.data = data;
return this;
}
}
第三步:Controller接口中调用
package com.example.demo.controller;
import com.example.demo.responseResult.Result;
import com.example.demo.responseResult.ResultCode;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/success1")
public Result success1() {
return Result.success();
}
@GetMapping("/success2")
public Result success2() {
return Result.success("成功返回的数据");
}
@GetMapping("/success3")
public Result success3() {
return Result.success().data("success3");
}
@GetMapping("/success4")
public Result success4() {
return Result.code(200).message("成功").data("success4"); // 不建议
}
@GetMapping("/failure1")
public Result failure1() {
return Result.failure(ResultCode.USER_ACCOUNT_FORBIDDEN);
}
@GetMapping("/failure2")
public Result failure2() {
return Result.failure(ResultCode.USER_ACCOUNT_FORBIDDEN, "错误返回的数据");
}
@GetMapping("/failure3")
public Result failure3() {
return Result.failure(ResultCode.USER_ACCOUNT_FORBIDDEN).data("failure3");
}
@GetMapping("/failure4")
public Result failure4() {
return Result.code(2003).message("账号被禁用").data("failure4"); // 不建议
}
}
响应效果如下: