如何使用 web.xml 和错误控制器以 JSON 格式配置 Spring 错误页面

How to configure Spring errror page in JSON format with web.xml and an error controller

使用 Spring 5,我目前能够在 src/main/webapp/web.xml 中配置一个 错误页面 ,即添加以下配置:

<error-page>
    <location>/WEB-INF/error.html</location>
</error-page>

这样,当controller中有Exception时,就会渲染error.html。但是,此 error.html 的格式 html 不同于预期的 JSON 格式。

我试图用这样的代码制作一个错误控制器

    @RestController
    @RequestMapping(value = "/handler")
    public class ErrorController {

      @RequestMapping(value = "/errors")
      public String renderErrorPage(HttpServletRequest httpRequest) {
        System.out.println("DEBUG::come to error page");
        return "test error";
      }
    }

同时配置error-page为:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<error-page>
    <location>/handler/errors</location>
</error-page>

但是ErrorController无法调用

问题:如何使用 web.xml 和错误控制器以 JSON 格式配置 Spring 错误页面?

我最终意识到servlats是通过servlet-mapping标签用/rest/*过滤的,所以error-pagelocation必须加上前缀[=16] =],意思是 error-page 标签应该这样配置:

<error-page>
    <location>/rest/errors</location>
</error-page>

相应地,控制器可以配置为:

@RestController
//@RequestMapping(value = "/handler")
public class ErrorController {

    @RequestMapping(value = "/errors")
    public String renderErrorPage(HttpServletRequest httpRequest) {
        System.out.println("DEBUG::come to error page");
        return "test error";
    }
}