请求参数处理

请求参数处理

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 个

其中,在使用 SpringMVC 的时候,就会添加 RequestMappingHandlerMappingBeanNameUrlHandlerMappingSimpleUrlHandlerMapping,Spring 的自动配置类添加了 RouterFunctionMappingWelcomePageHandlerMapping,根据《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 等等。另外一种是基于路由配置 RouterFunctionHandlerFunction 的,称为“函数式 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);
    }

}