一、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/n/142135.html
微信扫一扫
支付宝扫一扫