Spring-Boot:默认 Controller 避免加载静态资源

标签 spring spring-mvc spring-boot

在 Spring-Boot 中,除了普通的 Controller 之外,我还想要一个 Controller ,它可以捕获所有未知的请求。 (也称为“后备 Controller ”或“默认 Controller ”)

这对我有用:

@Controller
public class Default {
   @RequestMapping()
   public @ResponseBody def() {
      return "default";
   }
}

但是如果我调用静态资源,它们也会解析到这个默认 Controller 。

curl localhost:8080/sdkjfh -> "default" --- fine!
curl localhost:8080/test -> "test" --- fine - output of "test" controller!
curl localhost:8080/img/me.jpg -> "default" --- NOT fine! I want an image here!

我如何告诉 spring-boot 提供静态内容并拥有默认 Controller ?

最佳答案

删除“catch-all”处理程序方法并显式处理 404 错误。

您需要自定义容器行为并注册一个将在 404 NOT FOUND 上解析的 View (请参阅 Spring Boot - Error Handling ):

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer(){
    return new ErrorPagesCustomizer();
}

private static class ErrorPagesCustomizer implements EmbeddedServletContainerCustomizer {
    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404"));
    }
}

在 Controller 中映射/404。请注意,“catch-all”处理程序方法已被删除:

@Controller
public class DefaultController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    @ResponseBody
    public String index() {
        return "index";
    }

    @ResponseStatus(value= HttpStatus.NOT_FOUND)
    @RequestMapping(value = "/404", method = RequestMethod.GET)
    public String handleNotFound() {
        return "default";
    }
}

关于Spring-Boot:默认 Controller 避免加载静态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35179085/

相关文章:

spring - 在Spring 3.0.5 jar中找不到SimpleMapScope

java - Spring ApplicationListener 没有接收到事件

java - 在 Controller 中处理后如何在 Spring MVC 中重置 @ModelAttribute?

java - 用于名字验证的正则表达式

mysql - 在 ManyToMany 双向映射中 findAll() 获取行,每行包含其子项,而子项又包含其自身

java - Spring Boot RequestMapping 不适用于 Linux Fedora 26

java - 如何在 Spring Boot 中保持登录 session

java - 在 spring 中操作配置属性

java - 如何将spring checkbox标签转换为struts2 checkbox?

java - 带有 Netflix Eureka 的 Spring Boot 应用程序打包成 fat jar 后无法启动