WebMvcConfigurer 在 Spring Boot 中不起作用?

Jee*_*Roy 5 spring-mvc spring-boot

我改变了我完美工作的控制器类,它只是为了实现视图分辨率,如下所示:

@Controller
public class MyController {

@GetMapping("/signup")
public String signupPage() {
    return "signup";
}

@GetMapping("/login")
public String loginPage() {
    return "login";
}

@GetMapping("/dashboard")
public String dashboardPage() {
    return "dashboard";
}

@GetMapping("/logout")
public String logoutPage() {
    return "redirect:/";
}
}
Run Code Online (Sandbox Code Playgroud)

对于扩展 WebMvcConfigurer 的类,它具有如下所示的所有视图解析器:

@Configuration
@EnableWebMvc
public class ViewConfig implements WebMvcConfigurer {

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/signup").setViewName("signup");
    registry.addViewController("/login").setViewName("login");
    registry.addViewController("/dashboard").setViewName("dashboard");
    registry.addViewController("/logout").setViewName("redirect:/");
}
Run Code Online (Sandbox Code Playgroud)

这感觉更加简洁,干净。

但是,每当我尝试加载这些页面中的任何一个时,这都会给我 405 Method Not Allowed 错误。为什么会这样?spring boot 不支持 WebMvcConfigurer 吗?

Yee*_*der 4

Spring Boot Documentation中提到了这一点,在 spring mvc 部分下您可以使用 WebMvcConfigurer,但不需要执行 @EnableWebMvc

所以你应该删除@EnableWebMvc注释!

@Configuration
// @EnableWebMvc Remove this!
public class ViewConfig implements WebMvcConfigurer {

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/signup").setViewName("signup");
    registry.addViewController("/login").setViewName("login");
    registry.addViewController("/dashboard").setViewName("dashboard");
    registry.addViewController("/logout").setViewName("redirect:/");
}
Run Code Online (Sandbox Code Playgroud)

  • 那么什么时候应该使用@EnableWebMvc注解呢? (2认同)