色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

SpringBoot返回統一的JSON標準格式實現步驟

瀏覽:48日期:2023-12-02 08:34:09

期望返回的JSON格式如下

{ 'code': 200, 'msg': '操作成功', 'data': 'hello jenkins'}

實現步驟如下

1.自定義狀態碼枚舉類。

@AllArgsConstructor@Getterpublic enum StatusCodeEnum { SC200(200, '操作成功'), SC999(999, '操作失敗'), SC401(401, '匿名用戶訪問權限資源時的異常'), SC403(403, '無訪問權限,請聯系管理員授予權限'), SC404(404, '請求的資源不存在'), SC500(500, '系統異常,請稍后重試'), // ...略 private final Integer code; private final String msg;}

2.封裝返回結果

@Datapublic class ApiResult<T> implements Serializable { private Integer code; private String msg; private T data; public static <T> ApiResult<T> success(T data) {return ApiResult.success(StatusCodeEnum.SC200.getMsg(), data); } public static <T> ApiResult<T> success(String msg, T data) {ApiResult<T> apiResult = new ApiResult<>();apiResult.setCode(StatusCodeEnum.SC200.getCode());apiResult.setMsg(msg);apiResult.setData(data);return apiResult; } public static <T> ApiResult<T> fail(Integer code, String msg) {ApiResult<T> apiResult = new ApiResult<>();apiResult.setCode(code);apiResult.setMsg(msg);return apiResult; }}

3.全局異常捕獲處理,使用@RestControllerAdvice注解。

@Slf4j@RestControllerAdvicepublic class GlobalExceptionHandler { /** * 捕獲其他異常 */ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler(Exception.class) public ApiResult<String> handle(Exception e) {log.error('全局異常信息:{}', e.getMessage());return ApiResult.fail(StatusCodeEnum.SC500.getCode(), StatusCodeEnum.SC500.getMsg()); }}注解 功能 @RestControllerAdvice RestController的增強類,可用于實現全局異常處理器 @ExceptionHandler 統一處理某一類異常,從而減少代碼重復率和復雜度,比如要獲取自定義異常可以@ExceptionHandler(BusinessException.class) @ResponseStatus 指定客戶端收到的http狀態碼

注:請求進來 會按照 filter -> interceptor -> controllerAdvice -> aspect -> controller的順序調用,404異常(NoHandlerFoundException)是無法通過這種方式捕獲的,因為在Filter層發生的異常都會到Spring默認的異常處理。如果你在配置文件配置了server.error.path的話,就會使用你配置的異常處理地址,如果沒有就會使用你配置的error.path路徑地址,如果還是沒有,默認使用/error來作為發生異常的處理地址。如果想要替換默認的非Controller異常處理直接實現Spring提供的ErrorController接口就行了。

4.攔截Controller方法的返回值,統一處理返回值/響應體,因為我們后面每寫一個接口都需要調用ApiResult.success()這行代碼對結果進行包裝,重復勞動,浪費體力,我們只需要實現SpringBoot提供的ResponseBodyAdvice接口即可。

@RestControllerAdvicepublic class ApiResultWrapper implements ResponseBodyAdvice<Object> { /** * 是否支持advice功能 */ @Override public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {return true; } /** * 對返回的數據進行處理 */ @Override public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {if (o instanceof String) { return JSON.toJSONString(ApiResult.success(o));}// 這個判斷的作用:防止全局異常處理后返回的結果(類型為ApiResult)再次被包裝if (o instanceof ApiResult) { return o;}return ApiResult.success(o); }}

5.創建Controller,定義兩個方法,讓第二個方法拋異常

@RestControllerpublic class TestController { @GetMapping('/test1') public String test1() {return '當前時間:' + LocalDateTime.now().format(DateTimeFormatter.ofPattern('yyyy-MM-dd HH:mm:ss')); } @GetMapping('/test2') public Integer test2() {System.out.println(1 / 0);return Integer.MAX_VALUE; }}

6.分別請求http://localhost:8080/test1、http://localhost:8080/test2,結果如下

SpringBoot返回統一的JSON標準格式實現步驟SpringBoot返回統一的JSON標準格式實現步驟

在全局異常處理類中寫了一行代碼

log.error('全局異常信息:{}', e.getMessage());

所以調用test2方法時控制臺打印異常信息如下

SpringBoot返回統一的JSON標準格式實現步驟

到此這篇關于SpringBoot返回統一的JSON標準格式的文章就介紹到這了,更多相關SpringBoot返回JSON格式內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 欧美一级在线观看播放 | 亚洲清纯自偷自拍另类专区 | 国产欧美另类久久久精品免费 | 精品精品国产高清a毛片 | www.夜色.com| 午夜爱爱毛片xxxx视频免费看 | 国产欧美另类 | 91精品国产91久久久久久青草 | 亚洲精品第一第二区 | 欧美片欧美日韩国产综合片 | 一级毛片真人免费观看 | 成人免费一级片 | 国产精品拍拍拍福利在线观看 | 欧美一级毛片俄罗斯 | 亚洲成人高清在线 | 在线视频日韩精品 | baoyu121永久免费网站 | 亚洲人成免费 | 亚洲社区在线 | 色拍拍噜噜噜aⅴ在线观看 色青青草原桃花久久综合 色婷婷91 | 免费人成在线观看网站视频 | 国产女人一区二区 | 亚洲成aⅴ人在线观看 | 成人午夜久久 | 亚洲欧美综合一区二区三区四区 | 日本免费一区二区三区视频 | 免费观看成人久久网免费观看 | 国产91久久最新观看地址 | 99视频精品免费99在线 | 欧美一级大黄特黄毛片视频 | 99国产小视频 | 欧美一二三 | 国产一级做a爰片在线 | 亚洲欧洲国产视频 | 精品亚洲视频在线 | 国产亚洲精品一区二区久久 | 丝袜精品 欧美 亚洲 自拍 | 岛国大片在线播放免费 | 色综合久久综合 | 国产成人综合高清在线观看 | 97在线观看免费版 |