当前位置: 首页 > 知识库问答 >
问题:

为什么我的ControllerAdvice在spring boot中不起作用

何松
2023-03-14
@ControllerAdvice
public class GlobalExceptionController  {

    public static final String DEFAULT_ERROR_VIEW = "error";

    @ExceptionHandler(Exception.class)
    public ModelAndView defaultError(HttpServletRequest req, Exception e)
            throws Exception {

        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null)
            throw e;
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", req.getRequestURL());
        mav.setViewName(DEFAULT_ERROR_VIEW);
        return mav;
    }

}

这是my snippet error.html代码(使用thymeleaf):

<div class="container">
        <h1 th:inline="text">Error</h1>
        <p th:text="${exception}"></p>
        <p th:text="${url}"></p>
</div>

和Spring Security配置代码片段:

@Override
protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/login").permitAll().anyRequest()
        .fullyAuthenticated().and().formLogin().loginPage("/login")
        .failureUrl("/login?error").and().logout()
        .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).and()
        .exceptionHandling().accessDeniedPage("/access?error");

}

如果我试图使用错误的URL访问我的应用程序,那么GlobalExcetionController中的对象异常和URL不会在error.html中呈现,为什么?

共有1个答案

戴霖
2023-03-14

“已解”

我将这个@bean添加到Spring Boot配置中

@Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return new EmbeddedServletContainerCustomizer() {
            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {

                ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND,
                        "/error404.html");
                container.addErrorPages(error404Page);

            }
        };
    }

对于错误404.html必须位于静态文件夹中

 类似资料:
  • 请建议如何解决这个问题。我被困在这里了。 下面是错误信息; null

  • Stage.close()对我不起作用。 我查看了:JavaFX2.0:关闭一个舞台(窗口) 这是我的代码: 下面是调用消息框类的代码:

  • 我有一个Spring Boot应用程序,我试图在其中测试使用LiquiBase的一些迁移。我试着看看回滚函数是如何工作的,但我不断地得到错误。 当我运行应用程序时,表创建正确...但我不知道如何或在哪里运行命令来执行回滚。我尝试在IntelliJ中的Maven Goal中运行以下命令: 当我运行时,它会说: 如果数据库URL丢失或错误,那么我认为它也不能创建表?

  • 问题内容: 我有一个复合主键的表,其中指的是实体 HolidayPackage 有 许多 到 一个 关系 HolidayPackageVariant 和 HolidayPackage 。 当我尝试在HolidayPackageVariant中进行复杂的PK映射时,出现以下错误: 初始SessionFactory创建失败。org.hibernate.annotations.common.Assert

  • 我正在尝试检测我的两个精灵何时发生碰撞。我做的第一件事是在我的播放器周围创建一个矩形(称为player.img),然后在我想检测的树周围创建另一个矩形(称为背景.treesrect)。我将玩家矩形的坐标设置为等于当用户按下键移动时更新的坐标,但玩家矩形不移动。然后我使用精灵.碰撞(精灵)函数来检测它们是否碰撞并且没有检测到。有人可以向我展示为什么我的播放器矩形没有更新以及其他任何可能错误的内容吗?

  • 问题内容: 我在这里有点困惑。如果我将变量传递给json_decode,它将不起作用: 第一个回显正确显示了我传递的JSON字符串,例如 第二个回显显示NULL。因此,我从第一个回显中获取了字符串,并编写了以下代码: 你怎么说,它向我展示了正确解码的数组。字符串绝对相同,我什至保留转义字符。也许是问题所在? 问题答案: 看起来您的服务器已启用。无论是将其禁用或运行通过使用它之前。