spring - Spring Boot Web应用-重定向 Controller

标签 spring spring-mvc error-handling spring-boot http-status-code-404

我需要有一个 Controller (或其他组件)来处理所有404错误,并巧妙地重定向到正确的页面(这基于表src/target)。我发现了一些有关处理 Controller 抛出的异常的问题,因此我做了以下工作:

@ControllerAdvice
public class ServiceExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(Throwable.class)
    @ResponseBody
    ResponseEntity<String> handleControllerException(HttpServletRequest req, Throwable ex) {

        String slug = req.getRequestURI(); // this is the URL that was not found
        URI location=null;
        try {
            // lookup based on slug ...
            location = new URI("http://cnn.com"); // let's say I want to redirect to cnn
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        HttpHeaders responseHeaders = new HttpHeaders();
        responseHeaders.setLocation(location);
        return new ResponseEntity<String>("Page has permanently moved", responseHeaders, HttpStatus.PERMANENT_REDIRECT);


    }
}

我没有进行任何其他配置更改

与此有关的两个问题是:
  • 它只捕获其他 Controller 抛出的异常,而不捕获404错误
  • 它捕获所有类型的异常,而不仅仅是404

  • 关于如何实现一种“包罗万象”的想法?

    最佳答案

    这可能不是最佳的Spring引导解决方案,但是可以从中推断出类似的想法并将其应用于您的应用程序。使用Spring 3.x时,我遇到了类似的问题,这是我想出的解决方案。

    我的情况是,我有多个servlet在同一应用程序上下文中运行。其中一个处理Web界面,另一个处理API调用。我希望servlet处理API调用的方式与UI servlet的处理方式不同。

    我创建了一个扩展DispatcherServlet的新类,并覆盖了noHandlerFound方法。我将新类连接到了<servlet>标记中的web.xml中,而不是以前的默认DispatcherServlet类中。

    <servlet>
        <servlet-name>api-servlet</servlet-name>
        <servlet-class>path.to.your.new.DispatcherServletClass</servlet-class>
        ...
    </servlet>
    

    关于spring - Spring Boot Web应用-重定向 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37019768/

    相关文章:

    java - 如何使用 Eclipse 在本地服务器上从 GitHub 运行 Web 应用程序?

    java - Spring Bean 范围

    zend-framework - 如何清除zend中两个表单页面上的一组错误

    javascript - 如何在 Winstonjs 记录器中记录未处理的超时错误?

    java - spring 集成中的运行时可配置动态路由

    java - 无法在 Spring Security 中使用 @Secured Method Security 注释

    java - 让一个 Tomcat 应用程序从另一个应用程序获取一个 bean

    java - 无法处理零件,因为即使现有的 multipartResolver 也没有提供多部分配置

    java - Spring MVC : X-Content-Type-Options problems, JavaScript 未加载

    python - Scrapy-Splash 错误 400 : "description": "Required argument is missing: url"