RequestMappingHandlerAdapter詳解

一、RequestMappingHandlerAdapter是什麼?

在Spring MVC框架中,RequestMappingHandlerAdapter是用來通過反射調用Controller中的方法並將請求參數映射到方法參數中的核心適配器之一。RequestMappingHandlerAdapter繼承自AbstractHandlerMethodAdapter類,其主要功能是處理使用@RequestMapping註解的方法。

二、RequestMappingHandlerAdapter的主要特性

RequestMappingHandlerAdapter具有以下主要特性:

1、支持@MatrixVariable註解:@MatrixVariable註解是用來處理RESTful風格URL中的矩陣變數,RequestMappingHandlerAdapter支持此註解,並將請求中的矩陣變數映射到方法參數中。

@RequestMapping(value = "/cars/{brand}")
public String getCar(@PathVariable String brand, @MatrixVariable(pathVar = "brand") String color) {
    return brand + " " + color + " car";
}

2、支持@PathVariable註解:@PathVariable註解是用來將請求中的佔位符映射到方法參數中,RequestMappingHandlerAdapter支持此註解。

@RequestMapping(value = "/cars/{brand}")
public String getCar(@PathVariable String brand) {
    return brand + " car";
}

3、支持@RequestHeader註解:@RequestHeader註解是用來將請求頭信息映射到方法參數中,RequestMappingHandlerAdapter支持此註解。

@RequestMapping(value = "/cars/{brand}")
public String getCar(@PathVariable String brand, @RequestHeader("User-Agent") String userAgent) {
    return brand + " car " + userAgent;
}

4、支持@RequestBody註解:@RequestBody註解是用來將請求體中的數據映射到方法參數中,RequestMappingHandlerAdapter支持此註解。

@RequestMapping(value = "/cars", method = RequestMethod.POST)
public String postCar(@RequestBody Car car) {
    return "Added car: " + car.getBrand();
}

5、支持@ResponseBody註解:@ResponseBody註解是用來將方法返回值轉換成指定格式的數據(如JSON或XML)並發送給客戶端,RequestMappingHandlerAdapter支持此註解。

@RequestMapping(value = "/cars/{brand}", method = RequestMethod.GET)
@ResponseBody
public Car getCar(@PathVariable String brand) {
    Car car = new Car();
    car.setBrand(brand);
    car.setYear(2022);
    return car;
}

三、RequestMappingHandlerAdapter的配置

RequestMappingHandlerAdapter可以通過WebMvcConfigurer來進行配置,配置的相關方法如下:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter> converters) {
        // 配置消息轉換器
        converters.add(new MappingJackson2HttpMessageConverter());
        converters.add(new StringHttpMessageConverter());
    }

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        // 配置內容協商
        configurer.defaultContentType(MediaType.APPLICATION_JSON);
    }

    @Override
    public void configureHandlerExceptionResolvers(List resolvers) {
        // 配置異常處理器
        resolvers.add(new DefaultHandlerExceptionResolver());
    }

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        // 配置路徑匹配
        configurer.setUseSuffixPatternMatch(false);
    }

    @Override
    public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
        // 配置非同步支持
        configurer.setDefaultTimeout(3000);
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 配置攔截器
        registry.addInterceptor(new LogInterceptor());
    }

    @Override
    public void addArgumentResolvers(List argumentResolvers) {
        // 配置參數解析器
        argumentResolvers.add(new RequestParamMethodArgumentResolver());
    }

    @Override
    public void addReturnValueHandlers(List returnValueHandlers) {
        // 配置返回值處理器
        returnValueHandlers.add(new RequestResponseBodyMethodProcessor());
    }
}

四、RequestMappingHandlerAdapter的其它相關類

RequestMappingHandlerAdapter的其它相關類有以下幾個:

1、HandlerMethodArgumentResolver:用來處理方法參數的介面,Spring MVC提供了多個默認的參數解析器,如RequestParamMethodArgumentResolver、PathVariableMethodArgumentResolver、ServletModelAttributeMethodProcessor等。

2、HandlerMethodReturnValueHandler:用來處理方法返回值的介面,Spring MVC提供了多個默認的返回值處理器,如RequestResponseBodyMethodProcessor、ViewNameMethodReturnValueHandler等。

3、HandlerExceptionResolver:用來處理異常的介面,Spring MVC提供了多個默認的異常處理器,如DefaultHandlerExceptionResolver、ResponseStatusExceptionResolver、ExceptionHandlerExceptionResolver等。

4、ContentNegotiationManager:用來管理內容協商的類,可用於配置響應格式及其優先順序。

五、總結

RequestMappingHandlerAdapter是Spring MVC中的核心適配器之一,其主要作用是將請求映射到Controller中的方法並將請求參數映射到方法參數中。RequestMappingHandlerAdapter不僅提供了常見註解(如@RequestMapping、@PathVariable、@RequestHeader等)的處理功能,還支持非同步請求、消息轉換、內容協商、異常處理等功能。RequestMappingHandlerAdapter的功能豐富,也需要我們合理配置來滿足不同的需求。

原創文章,作者:CHZK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/142135.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
CHZK的頭像CHZK
上一篇 2024-10-10 08:47
下一篇 2024-10-10 08:47

相關推薦

  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • C語言貪吃蛇詳解

    一、數據結構和演算法 C語言貪吃蛇主要運用了以下數據結構和演算法: 1. 鏈表 typedef struct body { int x; int y; struct body *nex…

    編程 2025-04-25

發表回復

登錄後才能評論