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

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

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

基于SpringAOP已經(jīng)實(shí)現(xiàn)統(tǒng)一功能增強(qiáng),但如果希望對(duì)Controller增強(qiáng),就無(wú)法獲取其中的http請(qǐng)求數(shù)據(jù)。因此,實(shí)現(xiàn)以下這些統(tǒng)一增強(qiáng)的業(yè)務(wù),就不能使用SpringAOP:

  • 響應(yīng)數(shù)據(jù)統(tǒng)一封裝
  • 統(tǒng)一異常處理(返回錯(cuò)誤信息的http響應(yīng))
  • http請(qǐng)求日志記錄

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

SpringMVC在SpringBoot項(xiàng)目中,是默認(rèn)進(jìn)行了配置,同時(shí)也提供了自定義的配置方式。

1、基于SpringMVC的配置類(lèi)擴(kuò)展

如:

 (1)添加路徑前綴

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

(2)添加攔截器

添加Controller的方法攔截器=>對(duì)請(qǐng)求映射方法進(jìn)行統(tǒng)一增強(qiáng)。

web開(kāi)發(fā)中的三大組件:過(guò)濾器、攔截器、監(jiān)聽(tīng)器。

攔截器:

對(duì)web請(qǐng)求和響應(yīng)進(jìn)行攔截,然后可以統(tǒng)一處理;

Spring中,包含兩種攔截器:

  • HandlerInterceptor:專門(mén)做SpringMVC請(qǐng)求和響應(yīng)的攔截;
  • MethodInterceptor:對(duì)方法進(jìn)行攔截,是SpringAOP的一種實(shí)現(xiàn)。

攔截器的實(shí)現(xiàn)原理:

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

MethodInterceptor實(shí)現(xiàn)原理:基于動(dòng)態(tài)代理。

2、統(tǒng)一的響應(yīng)數(shù)據(jù)格式封裝

使用@ControllerAdvice+ResponseBodyAdvice的方式實(shí)現(xiàn)。

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
//注解是對(duì)Controller進(jìn)行增強(qiáng)(SpringMVC代碼設(shè)計(jì))
public class ResponseAdvice implements ResponseBodyAdvice {
    //方法的返回值表示是否要對(duì)請(qǐng)求映射方法增強(qiáng)
    //兩個(gè)方法參數(shù),可以篩選controller中的請(qǐng)求映射方法
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return false;
    }
    //增強(qiáng)的邏輯:http返回的響應(yīng),基于方法的返回值來(lái)設(shè)置響應(yīng)體body
    //第一個(gè)方法參數(shù)body,是請(qǐng)求映射方法的返回值
    //調(diào)用登錄接口,返回map對(duì)象(ok=false,msg=xxx),就是body方法參數(shù)
    @Override
    public Object beforeBodyWrite(Object body,
                                  MethodParameter returnType,
                                  MediaType selectedContentType, 
                                  Class selectedConverterType,
                                  ServerHttpRequest request,
                                  ServerHttpResponse response) {
        //構(gòu)造一個(gè)統(tǒng)一的返回格式
        Map<String,Object> map =new HashMap<>();
        map.put("success",true);
        map.put("data",body);
        return map;
    }
}

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

Controller請(qǐng)求映射方法,如果拋異常,由統(tǒng)一異常處理的代碼來(lái)執(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注解,可以設(shè)置要補(bǔ)貨的Controller請(qǐng)求映射方法拋出的異常類(lèi)
    @ExceptionHandler(Exception.class)
    //方法的寫(xiě)法,和Controller請(qǐng)求映射方法的寫(xiě)法類(lèi)似
    //如果返回json就使用@ResponseBody,如果返回網(wǎng)頁(yè),就返回資源路徑的字符串
    @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;
    }
    
}

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

相關(guān)文章

  • 詳解java注解相關(guān)知識(shí)

    詳解java注解相關(guān)知識(shí)

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

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

    下面小編就為大家?guī)?lái)一篇深入理解java中i++和++i的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案

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

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

    Java8新日期時(shí)間API的20個(gè)使用示例

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

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

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

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

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

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

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

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

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

    初次體驗(yàn)MyBatis的注意事項(xiàng)

    今天給大家?guī)?lái)的是關(guān)于MyBatis的相關(guān)知識(shí),文章圍繞著MyBatis的用法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 使用FormData上傳二進(jìn)制文件、對(duì)象、對(duì)象數(shù)組方式

    使用FormData上傳二進(jìn)制文件、對(duì)象、對(duì)象數(shù)組方式

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

最新評(píng)論

多伦县| 邢台市| 湖南省| 扎鲁特旗| 天柱县| 武城县| 沁阳市| 贞丰县| 工布江达县| 怀柔区| 樟树市| 阳原县| 西青区| 安仁县| 福鼎市| 南汇区| 昌平区| 吴桥县| 宁晋县| 隆德县| 余江县| 安溪县| 正阳县| 沽源县| 乐平市| 广西| 财经| 宁乡县| 盐山县| 遂溪县| 武清区| 偏关县| 固安县| 克拉玛依市| 金山区| 运城市| 施秉县| 武鸣县| 左贡县| 安塞县| 湘潭县|