欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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),就無法獲取其中的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的配置類擴(kuò)展

如:

 (1)添加路徑前綴

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

(2)添加攔截器

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

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

攔截器:

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

Spring中,包含兩種攔截器:

  • HandlerInterceptor:專門做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)代理?。?!

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),基于方法的返回值來設(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)一異常處理的代碼來執(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)求映射方法拋出的異常類
    @ExceptionHandler(Exception.class)
    //方法的寫法,和Controller請(qǐng)求映射方法的寫法類似
    //如果返回json就使用@ResponseBody,如果返回網(wǎng)頁,就返回資源路徑的字符串
    @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基礎(chǔ)學(xué)習(xí)筆記之泛型

    java基礎(chǔ)學(xué)習(xí)筆記之泛型

    所謂泛型,就是變量類型的參數(shù)化。泛型是JDK1.5中一個(gè)最重要的特征。通過引入泛型,我們將獲得編譯時(shí)類型的安全和運(yùn)行時(shí)更小的拋出ClassCastException的可能。在JDK1.5中,你可以聲明一個(gè)集合將接收/返回的對(duì)象的類型。
    2016-02-02
  • Mybatis中foreach標(biāo)簽帶來的空格\換行\(zhòng)回車問題及解決方案

    Mybatis中foreach標(biāo)簽帶來的空格\換行\(zhòng)回車問題及解決方案

    這篇文章主要介紹了解決Mybatis中foreach標(biāo)簽帶來的空格,換行,回車問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • mybatis plus自動(dòng)生成代碼tinyint(1)自動(dòng)轉(zhuǎn)換為Boolean的問題及解決

    mybatis plus自動(dòng)生成代碼tinyint(1)自動(dòng)轉(zhuǎn)換為Boolean的問題及解決

    這篇文章主要介紹了mybatis plus自動(dòng)生成代碼tinyint(1)自動(dòng)轉(zhuǎn)換為Boolean的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot bean查詢加載順序流程詳解

    SpringBoot bean查詢加載順序流程詳解

    當(dāng)你在項(xiàng)目啟動(dòng)時(shí)需要提前做一個(gè)業(yè)務(wù)的初始化工作時(shí),或者你正在開發(fā)某個(gè)中間件需要完成自動(dòng)裝配時(shí)。你會(huì)聲明自己的Configuration類,但是可能你面對(duì)的是好幾個(gè)有互相依賴的Bean
    2023-03-03
  • Java中this,static,final,const用法詳解

    Java中this,static,final,const用法詳解

    這篇文章主要介紹了Java中this,static,final,const用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Struts2 自定義下拉框Tag標(biāo)簽

    Struts2 自定義下拉框Tag標(biāo)簽

    這篇文章主要介紹了Struts2 自定義下拉框Tag標(biāo)簽的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • SpringBoot項(xiàng)目集成日志的實(shí)現(xiàn)方法

    SpringBoot項(xiàng)目集成日志的實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot項(xiàng)目集成日志的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • 詳解MyBatis XML配置解析

    詳解MyBatis XML配置解析

    這篇文章主要介紹了詳解MyBatis XML配置解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot項(xiàng)目集成依賴Mybatis步驟

    SpringBoot項(xiàng)目集成依賴Mybatis步驟

    在本篇文章中小編給大家分享了關(guān)于SpringBoot項(xiàng)目如何集成依賴Mybatis的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-06-06
  • 詳解Java內(nèi)存泄露的示例代碼

    詳解Java內(nèi)存泄露的示例代碼

    這篇文章通過一個(gè)Demo來簡要介紹下ThreadLocal和ClassLoader導(dǎo)致內(nèi)存泄露最終OutOfMemory的場景。下面通過示例代碼給大家分享Java內(nèi)存泄露的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2017-12-12

最新評(píng)論