1.在springboot2.3.2 版本中。默认不开启请求方式的转换(默认不在ioc容器中注册hiddenHttpMethodFilter)
@Bean
@ConditionalOnMissingBean({HiddenHttpMethodFilter.class})
@ConditionalOnProperty(
prefix = "spring.mvc.hiddenmethod.filter",
name = {"enabled"},
matchIfMissing = true
)
public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() {
return new OrderedHiddenHttpMethodFilter();
}
这是springboot中有关mvc的自动配置中的一段源码,可以看到注册hiddenHttpMethodFilter注册进ioc容器中是有条件的。
@ConditionalOnProperty指定了条件:即在springboot的配置文件中spring.mvc.hiddenmethod.filter.enabled=true,所以我们需要在配置文件中写上这句话。
2.当我们自己写了mvc的配置类后,以上做法可能不能直接开启restful风格的url请求
//自定义的mvc配置类
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
原因如下:
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {
可以看到,springmvc的自动配置起效果的一个条件是,容器中没有WebMvcConfigurationSupport类,而我们自定义的配置类如果加上了@EnableWebMvc注解,就会在容器中添加WebMvcConfigurationSupport类,从而使webmvc的自动配置失效。
这种情况下,可以在自定义的配置类中注册hiddenHttpMethodFilter。
@Bean
@ConditionalOnMissingBean({HiddenHttpMethodFilter.class})
public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() {
return new OrderedHiddenHttpMethodFilter();
}