如何使用 Spring Boot 创建 404 控制器?
How do I create a 404 controller using Spring Boot?
我想 return 使用 SpringBoot 的自定义 404 错误,但我希望能够向它添加一些服务器端逻辑,而不仅仅是提供静态页。
1.我在 application.properties
中关闭了默认的白标签页面
error.whitelabel.enabled=false
2。我在 resources/templates
下添加了 Thymeleaf error.html
顺便说一句,这行得通。该页面已提供,但未调用控制器。
3。我创建了一个 class Error
作为 "Controller"
package com.noxgroup.nitro.pages;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/error")
public class Error {
@ExceptionHandler
public String index() {
System.out.println("Returning Error");
return "index";
}
}
很遗憾,我没有在控制台的任何地方看到 Returning Error
。
我正在使用带有 Spring 引导的嵌入式 Tomcat。我已经看到了各种选项,但似乎都不起作用,包括使用 @ControllerAdvice、删除 RequestMapping 等。对我来说都不起作用。
servlet 容器将在到达 Spring 之前接收到 404,因此您需要在 servlet 容器级别定义一个错误页面,该页面将转发到您的自定义控制器。
@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error"));
}
}
我发现最简单的方法是实现 ErrorController。
@Controller
public class RedirectUnknownUrls implements ErrorController {
@GetMapping("/error")
public void redirectNonExistentUrlsToHome(HttpServletResponse response) throws IOException {
response.sendRedirect("/");
}
@Override
public String getErrorPath() {
return "/error";
}
}
我想 return 使用 SpringBoot 的自定义 404 错误,但我希望能够向它添加一些服务器端逻辑,而不仅仅是提供静态页。
1.我在 application.properties
error.whitelabel.enabled=false
2。我在 resources/templates
顺便说一句,这行得通。该页面已提供,但未调用控制器。
3。我创建了一个 class Error
作为 "Controller"
package com.noxgroup.nitro.pages;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/error")
public class Error {
@ExceptionHandler
public String index() {
System.out.println("Returning Error");
return "index";
}
}
很遗憾,我没有在控制台的任何地方看到 Returning Error
。
我正在使用带有 Spring 引导的嵌入式 Tomcat。我已经看到了各种选项,但似乎都不起作用,包括使用 @ControllerAdvice、删除 RequestMapping 等。对我来说都不起作用。
servlet 容器将在到达 Spring 之前接收到 404,因此您需要在 servlet 容器级别定义一个错误页面,该页面将转发到您的自定义控制器。
@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error"));
}
}
我发现最简单的方法是实现 ErrorController。
@Controller
public class RedirectUnknownUrls implements ErrorController {
@GetMapping("/error")
public void redirectNonExistentUrlsToHome(HttpServletResponse response) throws IOException {
response.sendRedirect("/");
}
@Override
public String getErrorPath() {
return "/error";
}
}