SpringBoot+Response如何統(tǒng)一返回result結(jié)果集
SpringBoot+Response統(tǒng)一返回result結(jié)果集
在SpringBoot開發(fā)接口中,通常會(huì)對(duì)java api統(tǒng)一返回result結(jié)果集,前端或者調(diào)用放可以根據(jù)返回的result結(jié)果集判斷請(qǐng)求得到的數(shù)據(jù)是否正確,是否有效,一般情況下,使用java自定義的result結(jié)果集封裝。
java統(tǒng)一返回?cái)?shù)據(jù)格式
Response.java
//import com.fasterxml.jackson.annotation.JsonInclude;
/**
* 螞蟻舞
*/
//@JsonInclude(JsonInclude.Include.NON_NULL)
public class Response {
private boolean state;
private int code;
private String msg;
private Object data;
private long timestamp;
public Response() {}
public Response(boolean state, int code, String msg) {
this.state = state;
this.code = code;
this.msg = msg;
this.timestamp = System.currentTimeMillis()/1000;
}
public Response(boolean state, int code, String msg, Object data) {
this.state = state;
this.code = code;
this.msg = msg;
this.data = data;
this.timestamp = System.currentTimeMillis()/1000;
}
public boolean isState() {
return state;
}
public void setState(boolean state) {
this.state = state;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
@Override
public String toString() {
return "Response{" +
"state=" + state +
", code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
", timestamp=" + timestamp +
'}';
}
}java返回結(jié)果統(tǒng)一封裝 靜態(tài)類
ResponseCode.java
/**
* 螞蟻舞
*/
public class ResponseCode {
private static final boolean STATE_TRUE = true;
private static final boolean STATE_FALSE = false;
private static final int CODE_200 = 200; //操作資源成功
private static final int CODE_201 = 201; //資源為空
private static final int CODE_100 = 100; //操作資源失敗
private static final int CORE_101 = 101; //缺少必要參數(shù)
private static final int CORE_102 = 102; //參數(shù)無(wú)效返回
private static final int CORE_303 = 303; //請(qǐng)求token無(wú)效或者token失效到期 提示前端后,前端用戶可手動(dòng)刷新重新登陸
private static final int CORE_304 = 304; //請(qǐng)求token無(wú)效或者token失效到期 提示前端后,前端自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
private static final int CORE_305 = 305; //未攜帶token認(rèn)證信息,提示前端后,前端用戶可手動(dòng)刷新重新登陸
private static final int CORE_306 = 306; //未攜帶token認(rèn)證信息,提示前端后,前端自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
private static final int CORE_307 = 307; //未登錄 前端用戶可手動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
private static final int CORE_308 = 308; //未登錄 前端自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
private static final int CORE_400 = 400; //全局異常
private static final int CORE_600 = 600; //您的權(quán)限不夠
private static final int CORE_601 = 601; //未經(jīng)授權(quán)不可訪問
private static final String MSG_ALL_SUCCESS = "操作資源成功";
private static final String MSG_SELECT_SUCCESS = "獲取資源成功";
private static final String MSG_UPDATE_SUCCESS = "更新資源成功";
private static final String MSG_INSERT_SUCCESS = "新增資源成功";
private static final String MSG_REMOVE_SUCCESS = "移除資源成功";
private static final String MSG_DELETE_SUCCESS = "刪除資源成功";
private static final String MSG_ALL_FAIL = "操作資源失敗";
private static final String MSG_SELECT_FAIL = "獲取資源失敗";
private static final String MSG_UPDATE_FAIL = "更新資源失敗";
private static final String MSG_INSERT_FAIL = "新增資源失敗";
private static final String MSG_REMOVE_FAIL = "移除資源失敗";
private static final String MSG_DELETE_FAIL = "刪除資源失敗";
private static final String MSG_RESOURCES_EMPTY = "資源為空";
private static final String MSG_PARAMETER_LACK = "缺少必要參數(shù)";
private static final String MSG_PARAMETER_INVALID = "參數(shù)無(wú)效";
private static final String MSG_EXCEPTION_GLOBAL = "操作異常,請(qǐng)重新嘗試";
private static final String MSG_TOKEN_INVALID = "請(qǐng)求token無(wú)效或者token失效到期";
private static final String MSG_TOKEN_INVALID_SKIP = "請(qǐng)求token無(wú)效或者token失效到期,自動(dòng)跳轉(zhuǎn)登錄頁(yè)";
private static final String MSG_TOKEN_NO_AUTH = "未攜帶token認(rèn)證信息,請(qǐng)重新登陸";
private static final String MSG_TOKEN_NO_AUTH_SKIP = "未攜帶token認(rèn)證信息,請(qǐng)重新登陸, 自動(dòng)跳轉(zhuǎn)到登錄頁(yè)";
private static final String MSG_TOKEN_NO_LOGIN = "未登錄,請(qǐng)登錄";
private static final String MSG_TOKEN_NO_LOGIN_SKIP = "未登錄,請(qǐng)登錄 自動(dòng)跳轉(zhuǎn)到登錄頁(yè)";
private static final String MSG_TOKEN_NO_PERMISSION = "未經(jīng)授權(quán)的不可訪問";
private static final String MSG_TOKEN_NOT_PERMISSION = "您的權(quán)限不足";
/**
* 未登錄,請(qǐng)登錄
*/
public static Response noLoginResponse(){
return new Response(STATE_FALSE,CORE_307,MSG_TOKEN_NO_LOGIN);
}
public static Response noLoginResponse(String msg){
return new Response(STATE_FALSE,CORE_307,msg);
}
public static Response noLoginSkipResponse(){
return new Response(STATE_FALSE,CORE_308,MSG_TOKEN_NO_LOGIN_SKIP);
}
public static Response noLoginSkipResponse(String msg){
return new Response(STATE_FALSE,CORE_308,msg);
}
// 未攜帶token認(rèn)證信息,請(qǐng)重新登陸
public static Response noAuthHeaderTokenResponse(){
return new Response(STATE_FALSE,CORE_305,MSG_TOKEN_NO_AUTH);
}
public static Response noAuthHeaderTokenResponse(String msg){
return new Response(STATE_FALSE,CORE_305,msg);
}
// 未攜帶token認(rèn)證信息,提示前端后,前端自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
public static Response noAuthHeaderTokenSkipResponse(){
return new Response(STATE_FALSE,CORE_306,MSG_TOKEN_NO_AUTH_SKIP);
}
public static Response noAuthHeaderTokenSkipResponse(String msg){
return new Response(STATE_FALSE,CORE_306,msg);
}
// 請(qǐng)求token無(wú)效或者token失效到期
public static Response invalidHeaderTokenResponse(){
return new Response(STATE_FALSE,CORE_303,MSG_TOKEN_INVALID);
}
public static Response invalidHeaderTokenResponse(String msg){
return new Response(STATE_FALSE,CORE_303,msg);
}
// 請(qǐng)求token無(wú)效或者token失效到期 前端可根據(jù)此項(xiàng)code跳轉(zhuǎn)到登錄頁(yè)
public static Response invalidHeaderTokenSkipResponse(){
return new Response(STATE_FALSE,CORE_304,MSG_TOKEN_INVALID_SKIP);
}
public static Response invalidHeaderTokenSkipResponse(String msg){
return new Response(STATE_FALSE,CORE_304,msg);
}
// 全局異常返回
public static Response exceptionResponse(){
return new Response(STATE_FALSE,CORE_400,MSG_EXCEPTION_GLOBAL);
}
public static Response exceptionResponse(String msg){
return new Response(STATE_FALSE,CORE_400,msg);
}
// 您的權(quán)限不足
public static Response notPermissionResponse(){
return new Response(STATE_FALSE,CORE_600,MSG_TOKEN_NOT_PERMISSION);
}
public static Response notPermissionResponse(String msg){
return new Response(STATE_FALSE,CORE_600,msg);
}
// 未經(jīng)授權(quán)的不可訪問
public static Response unauthorizedPermissionResponse(){
return new Response(STATE_FALSE,CORE_601,MSG_TOKEN_NO_PERMISSION);
}
public static Response unauthorizedPermissionResponse(String msg){
return new Response(STATE_FALSE,CORE_601,msg);
}
// 缺少必要參數(shù)返回
public static Response lackParameterResponse(){
return new Response(STATE_FALSE, CORE_101, MSG_PARAMETER_LACK);
}
public static Response lackParameterResponse(String msg){
return new Response(STATE_FALSE, CORE_101, msg);
}
// 參數(shù)無(wú)效通用返回
public static Response invalidParameterResponse(){
return new Response(STATE_FALSE, CORE_102, MSG_PARAMETER_INVALID);
}
public static Response invalidParameterResponse(String msg){
return new Response(STATE_FALSE, CORE_102, msg);
}
// 新增成功返回
public static Response successInsertResponse(){
return new Response(STATE_TRUE,CODE_200,MSG_INSERT_SUCCESS);
}
public static Response successInsertResponse(Object data){
return new Response(STATE_TRUE,CODE_200,MSG_INSERT_SUCCESS,data);
}
// 更新成功返回
public static Response successUpdateResponse(){
return new Response(STATE_TRUE,CODE_200,MSG_UPDATE_SUCCESS);
}
// 查詢成功返回
public static Response successSelectResponse(){
return new Response(STATE_TRUE,CODE_200,MSG_SELECT_SUCCESS);
}
public static Response successSelectResponse(Object data){
return new Response(STATE_TRUE, CODE_200, MSG_SELECT_SUCCESS, data);
}
// 移除成功返回
public static Response successRemoveResponse(){
return new Response(STATE_TRUE,CODE_200,MSG_REMOVE_SUCCESS);
}
// 刪除成功返回
public static Response successDeleteResponse(){
return new Response(STATE_TRUE,CODE_200,MSG_DELETE_SUCCESS);
}
// 通用success返回
public static Response successResponse(){
return new Response(STATE_TRUE,CODE_200,MSG_ALL_SUCCESS);
}
public static Response successResponse(String msg){
return new Response(STATE_TRUE,CODE_200,msg);
}
public static Response successResponse(Object data){
return new Response(STATE_TRUE,CODE_200,MSG_ALL_SUCCESS, data);
}
public static Response successResponse(String msg, Object data){
return new Response(STATE_TRUE,CODE_200,msg, data);
}
// 查詢結(jié)果為空時(shí)成功返回(沒有獲取到數(shù)據(jù))
public static Response successEmptyResponse(){
return new Response(STATE_TRUE,CODE_201,MSG_RESOURCES_EMPTY);
}
public static Response successEmptyResponse(String msg){
return new Response(STATE_TRUE,CODE_201,msg);
}
public static Response successEmptyResponse(Object data){
return new Response(STATE_TRUE,CODE_201,MSG_RESOURCES_EMPTY,data);
}
// 新增失敗返回
public static Response failInsertResponse(){
return new Response(STATE_FALSE,CODE_100,MSG_INSERT_FAIL);
}
public static Response failInsertResponse(String msg){
return new Response(STATE_FALSE,CODE_100,msg);
}
// 更新失敗返回
public static Response failUpdateResponse(){
return new Response(STATE_FALSE,CODE_100,MSG_UPDATE_FAIL);
}
public static Response failUpdateResponse(String msg){
return new Response(STATE_FALSE,CODE_100,msg);
}
// 查詢失敗返回
public static Response failSelectResponse(){
return new Response(STATE_FALSE,CODE_100,MSG_SELECT_FAIL);
}
public static Response failSelectResponse(String msg){
return new Response(STATE_FALSE,CODE_100,msg);
}
// 移除失敗返回
public static Response failRemoveResponse(){
return new Response(STATE_FALSE,CODE_100,MSG_REMOVE_FAIL);
}
public static Response failRemoveResponse(String msg){
return new Response(STATE_FALSE,CODE_100,msg);
}
// 刪除失敗返回
public static Response failDeleteResponse(){
return new Response(STATE_FALSE,CODE_100,MSG_DELETE_FAIL);
}
public static Response failDeleteResponse(String msg){
return new Response(STATE_FALSE,CODE_100,msg);
}
// 通用fail返回
public static Response failResponse(){
return new Response(STATE_FALSE,CODE_100,MSG_ALL_FAIL);
}
public static Response failResponse(String msg){
return new Response(STATE_FALSE,CODE_100,msg);
}
public static Response failResponse(String msg, Object data){
return new Response(STATE_FALSE,CODE_100,msg,data);
}
// 自定義返回結(jié)果
public static Response customizeResponse(boolean state, int code, String msg){
return new Response(state,code,msg);
}
public static Response customizeResponse(boolean state, int code, String msg, Object data){
return new Response(state, code, msg, data);
}
}springboot result統(tǒng)一的結(jié)果集處理
1 url的命名
在實(shí)際開發(fā)中名詞居多,見名知意
- get 獲取數(shù)據(jù)
- post 添加數(shù)據(jù)
- put 修改數(shù)據(jù)
- delete 邏輯假刪除
2 返回?cái)?shù)據(jù)的格式
2.1 一般返回的是json數(shù)據(jù) {狀態(tài)碼: 信息}
**一些常用的返回狀態(tài)碼 **
2.2 直接在Controller中調(diào)用靜態(tài)方法
- 2.2.1 先創(chuàng)建一個(gè)返回集的接口
public interface Result<T> {
}- 2.2.2 定義返回信息枚舉類型
public enum StatusTypeEnum {
/**
* 200為成功
* 404為錯(cuò)誤信息
*/
SUCCESS(200,"success"),
ERROR(404,"error");
private String msg;
private int status;
StatusTypeEnum(int status, String msg) {
this.status = status;
this.msg = msg;
}
}- 2.2.3 創(chuàng)建successResult返回集繼承返回集接口
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SuccessResult<T> implements Result<T> {
private StatusTypeEnum status;
private T data;
public static SuccessResult succes() {
return new SuccessResult<>(StatusTypeEnum.SUCCESS, null);
}
public static <T> SuccessResult succes(T data) {
return new SuccessResult<>(StatusTypeEnum.SUCCESS, data);
}
}- 2.2.4 創(chuàng)建errorResult返回集繼承返回集接口
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ErrorResult implements Result {
private StatusTypeEnum status;
private String msg;
public static ErrorResult error(int status, Exception ex) {
return new ErrorResult(StatusTypeEnum.ERROR, ex.getMessage());
}
public static ErrorResult error() {
return new ErrorResult(StatusTypeEnum.ERROR, "錯(cuò)誤");
}
}定義的內(nèi)容需要根據(jù)業(yè)務(wù)不同來(lái)定,這個(gè)只是大體架構(gòu)
2.3 利用AOP切面變成
@RestControllerAdvice + 實(shí)現(xiàn)ResponseBodyAdvice
將Result 封裝到aop 中, Controller層 直接返回 參數(shù),讓aop去判斷,返回的Result
@RestControllerAdvice
@Slf4j
public class GlobalResultAdvice implements ResponseBodyAdvice {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
log.error("supports");
//為false 將不執(zhí)行下面的aop方法
return true;
}
/**
*
* @param body
* @param returnType
* @param selectedContentType
* @param selectedConverterType
* @param request
* @param response
* @return
*/
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
Object resp = null;
if (body instanceof SuccessResult){
resp = body;
}else{
resp = SuccessResult.succes(body);
}
return resp;
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié)(推薦)
這篇文章主要介紹了IntelliJ IDEA 使用經(jīng)驗(yàn)總結(jié),非常不錯(cuò),具有參考價(jià)值,需要的朋友可以參考下2018-02-02
詳解IDEA用maven創(chuàng)建springMVC項(xiàng)目和配置
本篇文章主要介紹了詳解IDEA用maven創(chuàng)建springMVC項(xiàng)目和配置 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
參數(shù)校驗(yàn)Spring的@Valid注解用法解析
這篇文章主要介紹了參數(shù)校驗(yàn)Spring的@Valid注解用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Spring+SpringMVC+Hibernate整合實(shí)例講解
在本篇文章里小編給大家整理的是關(guān)于Spring+SpringMVC+Hibernate整合實(shí)例講解,需要的朋友們可以學(xué)習(xí)下。2020-03-03
Java?8函數(shù)式接口之BinaryOperator使用示例詳解
這篇文章主要大家介紹了Java?8函數(shù)式接口之BinaryOperator,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
springboot整合jquery和bootstrap框架過程圖解
這篇文章主要介紹了springboot整合jquery和bootstrap框架過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

