请求参数处理
请求参数处理
SpringBoot 2.7.5
rest 风格的 API 的使用
看《SpringMVC- 第六篇:RESTful.md》即可
SpringBoot 自动配置 HiddenHttpMethodFilter
相关源码参考
《SpringBoot-Web相关自动配置类源码解析-WebMvcAutoConfiguration.md》
中的HiddenHttpMethodFilter
小节
HiddenHttpMethodFilter
的注册需要手动开启
spring:
mvc:
hiddenmethod:
filter:
enabled: true
自定义参数名称
因为 SpringBoot 自动配置 HiddenHttpMethodFilter
的时候,会先判断 IOC 容器中是否已经注册了 HiddenHttpMethodFilter
类型的 bean,如果是,那就不配置了 HiddenHttpMethodFilter
(这都是通过 @ConditionalOnMissingBean
注解实现了)。因此我们想要自定义 HiddenHttpMethodFilter
,很简单,自己注册一个即可
@Configuration(proxyBeanMethods = false)
public class MyConfig {
@Bean
public HiddenHttpMethodFilter myHiddenHttpMethodFilter(){
HiddenHttpMethodFilter filter = new HiddenHttpMethodFilter();
filter.setMethodParam("_m");
return filter;
}
}
SpringBoot Web 中的 HandlerMapping
参考《SpringMVC 控制器方法(handler)的映射 - HandlerMapping.md》
在 SpringBoot 中,默认的 HandlerMapping
有 5 个
-
RequestMappingHandlerMapping
-
BeanNameUrlHandlerMapping
-
RouterFunctionMapping
-
SimpleUrlHandlerMapping
-
WelcomePageHandlerMapping
其中,在使用 SpringMVC 的时候,就会添加 RequestMappingHandlerMapping
、BeanNameUrlHandlerMapping
、SimpleUrlHandlerMapping
,Spring 的自动配置类添加了 RouterFunctionMapping
和 WelcomePageHandlerMapping
,根据《SpringBoot-Web 相关自动配置类源码解析 -WebMvcAutoConfiguration.md》我们知道,WelcomePageHandlerMapping
其实就是用于处理欢迎页的 HandlerMapping
,而 RouterFunctionMapping
这个 Bean 其实是在 WebMvcConfigurationSupport
中的 bean,这个 bean 的功能,顾名思义,是为了实现路由功能,将请求根据路径路由到指定的方法来运行。用的不多。
既然是
WebMvcConfigurationSupport
中的 bean,为什么在 SpringMVC 中没有生效,在 SpringBoot 中却生效了,还没搞清楚。TODO
HandlerFunction
实际上代表的是函数式WEB
。Spring 框架给我们提供了两种 http 端点暴露方式来隐藏 servlet 原理,一种就是这多年大家都在使用的基于注解的形式
@Controller
或@RestController
以及其他的注解如@RequestMapping
、@GetMapping
等等。另外一种是基于路由配置RouterFunction
和HandlerFunction
的,称为“函数式 WEB”。参考博客:Spring 5 MVC 中的 Router Function 使用_mob604756fb8908 的技术博客_51CTO 博客
SpringBoot Web 中的 HandlerAdapter
参考《SpringMVC 控制器方法(handler)适配器 - HandlerAdapter.md》
在 SpringBoot 中,默认的 HandlerAdapter
有 4 个,跟 SpringMVC 一样。
使用混合模式配置 SpringBoot Web
使用 SpringBoot 自动配置,同时自己自定义 Web
/**
* 使用SpringBoot自动配置,同时自己自定义Web
*/
@Configuration(proxyBeanMethods = false)
public class MyConfig implements WebMvcConfigurer {
@Bean
public HiddenHttpMethodFilter myHiddenHttpMethodFilter(){
HiddenHttpMethodFilter filter = new HiddenHttpMethodFilter();
filter.setMethodParam("_m");
return filter;
}
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper pathHelper = new UrlPathHelper();
pathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(pathHelper);
}
}