SpringBoot統(tǒng)一API響應(yīng)結(jié)果封裝的示例詳解
封裝內(nèi)容
響應(yīng)結(jié)果封裝是將后端服務(wù)返回的響應(yīng)數(shù)據(jù)按照統(tǒng)一的格式進(jìn)行封裝,這個(gè)格式通常包括狀態(tài)碼、狀態(tài)信息(或稱為消息)、返回?cái)?shù)據(jù)等關(guān)鍵信息。
- 狀態(tài)碼(Code):表示請求的處理結(jié)果,如成功、失敗、特定錯(cuò)誤等。狀態(tài)碼通常是一組預(yù)定義的整數(shù)或枚舉值。
- 狀態(tài)信息/消息(Message):與狀態(tài)碼相對應(yīng)的文本描述,用于提供關(guān)于請求處理結(jié)果的更多信息。
- 返回?cái)?shù)據(jù)(Data):實(shí)際業(yè)務(wù)處理的結(jié)果數(shù)據(jù),其類型可能因API而異。
此外,有些封裝還會(huì)包含時(shí)間戳、請求ID等附加信息,以便于日志追蹤和問題排查。
封裝示例
1、Result
package com.wen.data;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 統(tǒng)一 API 響應(yīng)結(jié)果封裝
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {
private int code;
private String message;
private T data;
public Result<T> setCode(ResultCode resultCode) {
this.code = resultCode.code;
this.message = resultCode.message;
return this;
}
public Result<T> setMessage(String message) {
this.message = message;
return this;
}
public Result<T> setData(T data) {
this.data = data;
return this;
}
}
2、ResultCode
package com.wen.data;
/**
* 響應(yīng)碼枚舉
*/
public enum ResultCode {
// 這里可以根據(jù)多個(gè)場景設(shè)置不同的響應(yīng)碼,供前端判斷問題并進(jìn)行解釋
SUCCESS(1,"SUCCESS"),
FAIL(400,"FAIL"),
NOT_FOUND(401,"interface not found"),
ERROR(500,"System Exception!");
public int code;
public String message;
ResultCode(int code, String message){
this.code = code;
this.message = message;
}
}
3、ResultGenerator
package com.wen.data;
/**
* 響應(yīng)結(jié)果生成
*/
public class ResultGenerator {
public static Result<?> genSuccessResult(){
return new Result<>().setCode(ResultCode.SUCCESS);
}
public static Result<?> genSuccessResult(Object data){
return new Result<>().setCode(ResultCode.SUCCESS).setData(data);
}
public static Result<?> genFailResult(String message){
return new Result<>().setCode(ResultCode.FAIL).setMessage(message);
}
public static Result<?> genSpecialResult(ResultCode resultCode, String message){
return new Result<>().setCode(resultCode).setMessage(message);
}
}
4、TestController
package com.wen.controller;
import com.wen.data.Result;
import com.wen.data.ResultGenerator;
import com.wen.dto.TbUser;
import com.wen.service.TestService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private TestService testService;
@GetMapping("/select")
public Result<?> selectUserByPage(
@Param("pageSize") Integer pageSize,
@Param("pageNumber") Integer pageNumber){
// 生成結(jié)果
return ResultGenerator.genSuccessResult(testService.selectUserByPage(pageSize, pageNumber));
}
}
5、生成結(jié)果
{
"code": 1,
"message": "SUCCESS",
"data": "2024-07-19"
}
以上就是SpringBoot統(tǒng)一API響應(yīng)結(jié)果封裝的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot統(tǒng)一API響應(yīng)結(jié)果的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringMVC實(shí)現(xiàn)賬號(hào)只能在一處登陸
這篇文章主要為大家詳細(xì)介紹了SpringMVC如何實(shí)現(xiàn)賬號(hào)只能在一處登陸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Springboot項(xiàng)目啟動(dòng)時(shí)端口被占用的問題及解決
這篇文章主要介紹了Springboot項(xiàng)目啟動(dòng)時(shí)端口被占用的問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05

