一、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-hant/n/142135.html
微信掃一掃
支付寶掃一掃