最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot統(tǒng)一功能處理的方式詳解

 更新時間:2022年08月09日 14:46:33   作者:喜歡敲代碼的大禿嚕  
這篇文章主要為大家詳細介紹了SpringBoot統(tǒng)一功能處理的方式,文中的示例代碼講解詳細,對我們學習或工作有一定借鑒價值,需要的可以參考一下

基于SpringAOP已經實現統(tǒng)一功能增強,但如果希望對Controller增強,就無法獲取其中的http請求數據。因此,實現以下這些統(tǒng)一增強的業(yè)務,就不能使用SpringAOP:

  • 響應數據統(tǒng)一封裝
  • 統(tǒng)一異常處理(返回錯誤信息的http響應)
  • http請求日志記錄

SpringMVC統(tǒng)一處理的三種方式

SpringMVC在SpringBoot項目中,是默認進行了配置,同時也提供了自定義的配置方式。

1、基于SpringMVC的配置類擴展

如:

 (1)添加路徑前綴

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        //對Controller中的路徑,添加前綴
        //需要注意:添加前綴后,之后進行資源訪問也需要添加前綴
        //第一個參數:要添加的前綴,第二個參數:用于鍋爐Controller中的方法
        configurer.addPathPrefix("api",(c)->true);
    }

(2)添加攔截器

添加Controller的方法攔截器=>對請求映射方法進行統(tǒng)一增強。

web開發(fā)中的三大組件:過濾器、攔截器、監(jiān)聽器。

攔截器:

對web請求和響應進行攔截,然后可以統(tǒng)一處理;

Spring中,包含兩種攔截器:

  • HandlerInterceptor:專門做SpringMVC請求和響應的攔截;
  • MethodInterceptor:對方法進行攔截,是SpringAOP的一種實現。

攔截器的實現原理:

HandlerInterceptor的實現原理:SpringMVC是基于框架實現了一個頂級的Servlet:DispatcherServlet,里面封裝了很多邏輯,其中包括HandlerInterceptor的邏輯。是基于代碼設計上的實現=>不是動態(tài)代理?。。?/p>

MethodInterceptor實現原理:基于動態(tài)代理。

2、統(tǒng)一的響應數據格式封裝

使用@ControllerAdvice+ResponseBodyAdvice的方式實現。

import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
 
import java.util.HashMap;
import java.util.Map;
 
@ControllerAdvice
//注解是對Controller進行增強(SpringMVC代碼設計)
public class ResponseAdvice implements ResponseBodyAdvice {
    //方法的返回值表示是否要對請求映射方法增強
    //兩個方法參數,可以篩選controller中的請求映射方法
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return false;
    }
    //增強的邏輯:http返回的響應,基于方法的返回值來設置響應體body
    //第一個方法參數body,是請求映射方法的返回值
    //調用登錄接口,返回map對象(ok=false,msg=xxx),就是body方法參數
    @Override
    public Object beforeBodyWrite(Object body,
                                  MethodParameter returnType,
                                  MediaType selectedContentType, 
                                  Class selectedConverterType,
                                  ServerHttpRequest request,
                                  ServerHttpResponse response) {
        //構造一個統(tǒng)一的返回格式
        Map<String,Object> map =new HashMap<>();
        map.put("success",true);
        map.put("data",body);
        return map;
    }
}

3、統(tǒng)一異常處理

Controller請求映射方法,如果拋異常,由統(tǒng)一異常處理的代碼來執(zhí)行。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
 
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
 
//統(tǒng)一異常處理
@Controller
public class ExceptionAdvice {
 
    //使用@ExceptionHandler注解,可以設置要補貨的Controller請求映射方法拋出的異常類
    @ExceptionHandler(Exception.class)
    //方法的寫法,和Controller請求映射方法的寫法類似
    //如果返回json就使用@ResponseBody,如果返回網頁,就返回資源路徑的字符串
    @ResponseBody
    public Object handle(Exception e,
                         HttpServletResponse){
        HashMap<String, Object>  map= new HashMap<>();
        map.put("success", 0);
        map.put("status", 1);
        map.put("msg", e.getMessage());
        return map;
    }
    
}

到此這篇關于SpringBoot統(tǒng)一功能處理的方式詳解的文章就介紹到這了,更多相關SpringBoot統(tǒng)一功能處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解java注解相關知識

    詳解java注解相關知識

    今天給大家?guī)淼氖顷P于Java的相關知識,文章圍繞著java注解的使用展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 深入理解java中i++和++i的區(qū)別

    深入理解java中i++和++i的區(qū)別

    下面小編就為大家?guī)硪黄钊肜斫鈐ava中i++和++i的區(qū)別。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案

    Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案

    今天小編就為大家分享一篇關于Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java8新日期時間API的20個使用示例

    Java8新日期時間API的20個使用示例

    這篇文章主要介紹了Java8新日期時間API的20個使用示例,為了學習Java 8的這個新庫,這里我創(chuàng)建了20個以任務為導向的例子,需要的朋友可以參考下
    2015-03-03
  • Java逃逸分析詳解及代碼示例

    Java逃逸分析詳解及代碼示例

    這篇文章主要介紹了Java逃逸分析詳解及代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Spring中Bean的生命周期使用解析

    Spring中Bean的生命周期使用解析

    這篇文章主要介紹了Spring中Bean的生命周期使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • JAVA如何獲取客戶端IP地址和MAC地址

    JAVA如何獲取客戶端IP地址和MAC地址

    本篇文章主要介紹了JAVA如何獲取客戶端IP地址和MAC地址非常具有實用價值,這里整理了詳細的代碼,需要的朋友可以參考下
    2017-08-08
  • java版十大排序經典算法:完整代碼(4)

    java版十大排序經典算法:完整代碼(4)

    優(yōu)秀的文章也不少,但是Java完整版的好像不多,我把所有的寫一遍鞏固下,同時也真誠的希望閱讀到這篇文章的小伙伴們可以自己去從頭敲一遍,不要粘貼復制!希望我的文章對你有所幫助,每天進步一點點
    2021-07-07
  • 初次體驗MyBatis的注意事項

    初次體驗MyBatis的注意事項

    今天給大家?guī)淼氖顷P于MyBatis的相關知識,文章圍繞著MyBatis的用法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 使用FormData上傳二進制文件、對象、對象數組方式

    使用FormData上傳二進制文件、對象、對象數組方式

    這篇文章主要介紹了使用FormData上傳二進制文件、對象、對象數組方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

海伦市| 通河县| 株洲县| 虎林市| 榆中县| 金堂县| 荣成市| 福泉市| 兰州市| 开阳县| 富平县| 温宿县| 丰台区| 西吉县| 都兰县| 河池市| 桂阳县| 东乌| 旺苍县| 海原县| 玉山县| 广西| 舒城县| 广水市| 北辰区| 遵义市| 连平县| 芮城县| 青田县| 都昌县| 临城县| 城市| 巴中市| 托克托县| 惠东县| 江北区| 嘉祥县| 从化市| 甘德县| 澄迈县| 康平县|