java - 在 Tomcat 中为 Spring MVC REST API 禁用默认错误页面

标签 java tomcat spring-mvc

我正在使用 Spring MVC 3.2 @RequestMapping 和 @ResponseBody 作为 REST 服务。示例端点如下所示:

@RequestMapping(value = "query", method = RequestMethod.GET)
@ResponseBody
public Locations searchHandler(@RequestParam String q, HttpServletRequest request,     HttpServletResponse response) {
...

为不存在的端点发送错误请求或缺少 GET 参数 q 将显示 Tomcat 7 错误报告:

<html>
    <head>
        <title>Apache Tomcat/7.0.50 - Error report</title>
        <style>
            <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}-->
        </style>
    </head>
    <body>
        <h1>HTTP Status 404 - </h1>
        <HR size="1" noshade="noshade">
            <p>
                <b>type</b> Status report
            </p>
            <p>
                <b>message</b>
                <u></u>
            </p>
            <p>
                <b>description</b>
                <u>The requested resource is not available.</u>
            </p>
            <HR size="1" noshade="noshade">
                <h3>Apache Tomcat/7.0.50</h3>
            </body>
        </html>

如何禁用此错误页面。我只希望将错误消息作为没有任何 HTML 或更多信息的内容。

最佳答案

好的,我找到了解决方案。我按照上面的链接中的描述实现了一个异常处理程序:

@ControllerAdvice
public class ErrorController {

    /**
     * .
     * @param request .
     * @param response .
     * @throws Exception .
     */
    @ExceptionHandler(Exception.class)
    public void handleConflict(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception {
        // If the exception is annotated with @ResponseStatus rethrow it and let
        // the framework handle it - like the OrderNotFoundException example
        // at the start of this post.
        // AnnotationUtils is a Spring Framework utility class.
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
            throw e;
        }

        response.setStatus(400);
        response.getWriter().println(e.getMessage());
    }
}

重要的是使用 response.getWriter()... 而不是 response.sendError()。

关于java - 在 Tomcat 中为 Spring MVC REST API 禁用默认错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21904818/

相关文章:

java - 无法转换为 org.springframework.security.core.userdetails.User

java - 打包时如何更改log4j配置

java - 判断一个方法是第一次还是第二次被调用?

java - 如何在 JHipster 中调试 'Your request cannot be processed'?

jsp - SpringBoot应用程序: Accessing Common application properties in a JSP page

java - Ajax + Spring Boot/Spring MVC/Jackson + 数据被截断?

java - 验证xml时如何获取错误行号

java - java判断文件是否存在

java - IntelliJ,无法启动简单的 Web 应用程序 : Unable to ping server at localhost:1099

tomcat重写,配置读取但不工作