亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式實(shí)現(xiàn)步驟

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

期望返回的JSON格式如下

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

實(shí)現(xiàn)步驟如下

1.自定義狀態(tài)碼枚舉類。

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

2.封裝返回結(jié)果

@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的增強(qiáng)類,可用于實(shí)現(xiàn)全局異常處理器 @ExceptionHandler 統(tǒng)一處理某一類異常,從而減少代碼重復(fù)率和復(fù)雜度,比如要獲取自定義異常可以@ExceptionHandler(BusinessException.class) @ResponseStatus 指定客戶端收到的http狀態(tài)碼

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

4.攔截Controller方法的返回值,統(tǒng)一處理返回值/響應(yīng)體,因?yàn)槲覀兒竺婷繉懸粋€(gè)接口都需要調(diào)用ApiResult.success()這行代碼對結(jié)果進(jìn)行包裝,重復(fù)勞動(dòng),浪費(fèi)體力,我們只需要實(shí)現(xiàn)SpringBoot提供的ResponseBodyAdvice接口即可。

@RestControllerAdvicepublic class ApiResultWrapper implements ResponseBodyAdvice<Object> { /** * 是否支持advice功能 */ @Override public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {return true; } /** * 對返回的數(shù)據(jù)進(jìn)行處理 */ @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));}// 這個(gè)判斷的作用:防止全局異常處理后返回的結(jié)果(類型為ApiResult)再次被包裝if (o instanceof ApiResult) { return o;}return ApiResult.success(o); }}

5.創(chuàng)建Controller,定義兩個(gè)方法,讓第二個(gè)方法拋異常

@RestControllerpublic class TestController { @GetMapping('/test1') public String test1() {return '當(dāng)前時(shí)間:' + 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,結(jié)果如下

SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式實(shí)現(xiàn)步驟SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式實(shí)現(xiàn)步驟

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

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

所以調(diào)用test2方法時(shí)控制臺(tái)打印異常信息如下

SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式實(shí)現(xiàn)步驟

到此這篇關(guān)于SpringBoot返回統(tǒng)一的JSON標(biāo)準(zhǔn)格式的文章就介紹到這了,更多相關(guān)SpringBoot返回JSON格式內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 亚洲综合第一欧美日韩中文 | 小泽玛利亚一区二区 | 成人午夜免费视频 | 第一福利在线 | 精品久久视频 | 黄色小视频免费 | 亚洲精品久久久久午夜 | 亚洲综合无码一区二区 | 欧美一级久久久久久久大片 | 免看一级a一片成人123 | 久国产视频 | 91香蕉国产视频 | 亚洲精品二区中文字幕 | 国产一级黄色大片 | 亚洲欧美中日韩 | 日本一级特级毛片视频 | 男女全黄做爰视频免费看 | 青青免费视频在线 | 国产精品毛片一区 | 一级特黄特色的免费大片视频 | 色噜噜人体337p处破 | 草操视频| tobesex日本护士 | 可以看毛片的网址 | 狠狠色丁香婷婷久久综合2021 | 国产大秀视频一区二区三区 | 1024日本 | 美女视频一区二区三区在线 | 国产巨乳在线 | 香蕉视频网站免费观视频 | 日韩毛片| 国产成人做受免费视频 | 成年日韩免费大片黄在线观看 | 亚洲欧美精选 | 136福利导福航 | 国产91小视频 | 日韩中文字幕在线观看视频 | 在线性视频 | 国产一二三区精品 | 国产黄| 免费看麻豆视频 |